From a8026e5503afb0f0b3e7554f8a8b454adfa60df1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=98=88=EC=A7=84=20=EB=B0=95?= Date: Mon, 28 Apr 2025 23:46:39 +0900 Subject: [PATCH 1/7] mission5 --- .gitattributes | 3 + .gitignore | 37 +++ build.gradle | 38 +++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43705 bytes gradle/wrapper/gradle-wrapper.properties | 7 + gradlew | 251 ++++++++++++++++++ gradlew.bat | 94 +++++++ settings.gradle | 1 + src/main/java/com/example/Application.java | 17 ++ .../java/com/example/domain/FoodCategory.java | 21 ++ src/main/java/com/example/domain/Member.java | 68 +++++ src/main/java/com/example/domain/Mission.java | 45 ++++ src/main/java/com/example/domain/Region.java | 25 ++ src/main/java/com/example/domain/Review.java | 30 +++ src/main/java/com/example/domain/Store.java | 31 +++ src/main/java/com/example/domain/Terms.java | 37 +++ .../com/example/domain/common/BaseEntity.java | 22 ++ .../java/com/example/domain/enums/Gender.java | 5 + .../example/domain/enums/MemberStatus.java | 5 + .../example/domain/enums/MissionStatus.java | 5 + .../com/example/domain/enums/SocialType.java | 5 + .../example/domain/mapping/MemberAgree.java | 30 +++ .../example/domain/mapping/MemberMission.java | 34 +++ .../example/domain/mapping/MemberPrefer.java | 34 +++ src/main/resources/application.yml | 19 ++ .../java/umc/spring/ApplicationTests.java | 13 + 26 files changed, 877 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 build.gradle create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle create mode 100644 src/main/java/com/example/Application.java create mode 100644 src/main/java/com/example/domain/FoodCategory.java create mode 100644 src/main/java/com/example/domain/Member.java create mode 100644 src/main/java/com/example/domain/Mission.java create mode 100644 src/main/java/com/example/domain/Region.java create mode 100644 src/main/java/com/example/domain/Review.java create mode 100644 src/main/java/com/example/domain/Store.java create mode 100644 src/main/java/com/example/domain/Terms.java create mode 100644 src/main/java/com/example/domain/common/BaseEntity.java create mode 100644 src/main/java/com/example/domain/enums/Gender.java create mode 100644 src/main/java/com/example/domain/enums/MemberStatus.java create mode 100644 src/main/java/com/example/domain/enums/MissionStatus.java create mode 100644 src/main/java/com/example/domain/enums/SocialType.java create mode 100644 src/main/java/com/example/domain/mapping/MemberAgree.java create mode 100644 src/main/java/com/example/domain/mapping/MemberMission.java create mode 100644 src/main/java/com/example/domain/mapping/MemberPrefer.java create mode 100644 src/main/resources/application.yml create mode 100644 src/test/java/umc/spring/ApplicationTests.java diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8af972c --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +/gradlew text eol=lf +*.bat text eol=crlf +*.jar binary diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c2065bc --- /dev/null +++ b/.gitignore @@ -0,0 +1,37 @@ +HELP.md +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..504afbc --- /dev/null +++ b/build.gradle @@ -0,0 +1,38 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '3.3.11' + id 'io.spring.dependency-management' version '1.1.7' +} + +group = 'umc' +version = '0.0.1-SNAPSHOT' + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } +} + +configurations { + compileOnly { + extendsFrom annotationProcessor + } +} + +repositories { + mavenCentral() +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'org.springframework.boot:spring-boot-starter-web' + compileOnly 'org.projectlombok:lombok' + runtimeOnly 'com.mysql:mysql-connector-j' + annotationProcessor 'org.projectlombok:lombok' + testImplementation 'org.springframework.boot:spring-boot-starter-test' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..9bbc975c742b298b441bfb90dbc124400a3751b9 GIT binary patch literal 43705 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 DHx0+F literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..37f853b --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..faf9300 --- /dev/null +++ b/gradlew @@ -0,0 +1,251 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original 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. +# +# SPDX-License-Identifier: Apache-2.0 +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# 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 ;; #( + MSYS* | 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 + if ! command -v java >/dev/null 2>&1 + then + 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 +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# 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"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..9d21a21 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,94 @@ +@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 +@rem SPDX-License-Identifier: Apache-2.0 +@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=. +@rem This is normally unused +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% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +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% equ 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! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..ebf1ef8 --- /dev/null +++ b/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'spring' diff --git a/src/main/java/com/example/Application.java b/src/main/java/com/example/Application.java new file mode 100644 index 0000000..23a4912 --- /dev/null +++ b/src/main/java/com/example/Application.java @@ -0,0 +1,17 @@ +package com.example; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.domain.EntityScan; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; + +@SpringBootApplication +//@EnableJpaAuditing +@EntityScan(basePackages = "com.example.domain") +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + +} diff --git a/src/main/java/com/example/domain/FoodCategory.java b/src/main/java/com/example/domain/FoodCategory.java new file mode 100644 index 0000000..bfda424 --- /dev/null +++ b/src/main/java/com/example/domain/FoodCategory.java @@ -0,0 +1,21 @@ +package com.example.domain; + +import com.example.domain.common.BaseEntity; + +import jakarta.persistence.*; + +import lombok.*; + +@Entity +@Getter +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor +public class FoodCategory extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false, length = 15) + private String name; +} diff --git a/src/main/java/com/example/domain/Member.java b/src/main/java/com/example/domain/Member.java new file mode 100644 index 0000000..bd9b69a --- /dev/null +++ b/src/main/java/com/example/domain/Member.java @@ -0,0 +1,68 @@ +package com.example.domain; + +import com.example.domain.common.BaseEntity; +import com.example.domain.enums.Gender; +import com.example.domain.enums.MemberStatus; +import com.example.domain.enums.SocialType; +import com.example.domain.mapping.MemberAgree; +import com.example.domain.mapping.MemberMission; +import com.example.domain.mapping.MemberPrefer; + +import jakarta.persistence.*; + +import lombok.*; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +@Entity +@Getter +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor +public class Member extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false, length = 20) + private String name; + + @Column(nullable = false, length = 40) + private String address; + + @Column(nullable = false, length = 40) + private String specAddress; + + @Enumerated(EnumType.STRING) + @Column(columnDefinition = "VARCHAR(10)") + private Gender gender; + + @Enumerated(EnumType.STRING) + private SocialType socialType; + + @Enumerated(EnumType.STRING) + @Column(columnDefinition = "VARCHAR(15) DEFAULT 'ACTIVE'") + private MemberStatus status; + + private LocalDate inactiveDate; + + @Column(nullable = false, length = 50) + private String email; + + private Integer point; + + @OneToMany(mappedBy = "member", cascade = CascadeType.ALL) + private List memberAgreeList = new ArrayList<>(); + + @OneToMany(mappedBy = "member", cascade = CascadeType.ALL) + private List memberPreferList = new ArrayList<>(); + + @OneToMany(mappedBy = "member", cascade = CascadeType.ALL) + private List reviewList = new ArrayList<>(); + + @OneToMany(mappedBy = "member", cascade = CascadeType.ALL) + private List memberMissionList = new ArrayList<>(); +} \ No newline at end of file diff --git a/src/main/java/com/example/domain/Mission.java b/src/main/java/com/example/domain/Mission.java new file mode 100644 index 0000000..02b2ec0 --- /dev/null +++ b/src/main/java/com/example/domain/Mission.java @@ -0,0 +1,45 @@ +package com.example.domain; + +import com.example.domain.common.BaseEntity; +import com.example.domain.mapping.MemberMission; + +import jakarta.persistence.*; + +import lombok.Getter; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.AccessLevel; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +@Entity +@Getter +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor +public class Mission extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private Integer reward; + + private LocalDate deadline; + + private String missionSpec; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "store_id") + private Store store; + + @OneToMany(mappedBy = "mission", cascade = CascadeType.ALL) + private List memberMissionList = new ArrayList<>(); + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "member_id") + private Member member; +} diff --git a/src/main/java/com/example/domain/Region.java b/src/main/java/com/example/domain/Region.java new file mode 100644 index 0000000..86e9300 --- /dev/null +++ b/src/main/java/com/example/domain/Region.java @@ -0,0 +1,25 @@ +package com.example.domain; + +import com.example.domain.common.BaseEntity; +import jakarta.persistence.*; + +import lombok.Getter; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.AccessLevel; + +@Entity +@Getter +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor +public class Region extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false, length = 20) + private String name; +} diff --git a/src/main/java/com/example/domain/Review.java b/src/main/java/com/example/domain/Review.java new file mode 100644 index 0000000..1457a08 --- /dev/null +++ b/src/main/java/com/example/domain/Review.java @@ -0,0 +1,30 @@ +package com.example.domain; + +import com.example.domain.common.BaseEntity; +import jakarta.persistence.*; + +import lombok.Getter; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.AccessLevel; + +@Entity +@Getter +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor +public class Review extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private String title; + + private Float score; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "member_id") + private Member member; +} \ No newline at end of file diff --git a/src/main/java/com/example/domain/Store.java b/src/main/java/com/example/domain/Store.java new file mode 100644 index 0000000..6bee24e --- /dev/null +++ b/src/main/java/com/example/domain/Store.java @@ -0,0 +1,31 @@ +package com.example.domain; + +import com.example.domain.common.BaseEntity; + +import jakarta.persistence.*; + +import lombok.Getter; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.AccessLevel; + +@Entity +@Getter +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor +public class Store extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false, length = 50) + private String name; + + @Column(nullable = false, length = 50) + private String address; + + private Float score; +} diff --git a/src/main/java/com/example/domain/Terms.java b/src/main/java/com/example/domain/Terms.java new file mode 100644 index 0000000..0ccb7ff --- /dev/null +++ b/src/main/java/com/example/domain/Terms.java @@ -0,0 +1,37 @@ +package com.example.domain; + +import com.example.domain.common.BaseEntity; +import com.example.domain.mapping.MemberAgree; + +import jakarta.persistence.*; + +import lombok.Getter; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.AccessLevel; + +import java.util.ArrayList; +import java.util.List; + + +@Entity +@Getter +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor +public class Terms extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private String title; + + private String body; + + private Boolean optional; + + @OneToMany(mappedBy = "terms", cascade = CascadeType.ALL) + private List memberAgreeList = new ArrayList<>(); +} diff --git a/src/main/java/com/example/domain/common/BaseEntity.java b/src/main/java/com/example/domain/common/BaseEntity.java new file mode 100644 index 0000000..e03f799 --- /dev/null +++ b/src/main/java/com/example/domain/common/BaseEntity.java @@ -0,0 +1,22 @@ +package com.example.domain.common; + +import jakarta.persistence.*; + +import lombok.Getter; + +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import java.time.LocalDateTime; + +@MappedSuperclass +@EntityListeners(AuditingEntityListener.class) +@Getter +public abstract class BaseEntity { + @CreatedDate + private LocalDateTime createdAt; + + @LastModifiedDate + private LocalDateTime updatedAt; +} diff --git a/src/main/java/com/example/domain/enums/Gender.java b/src/main/java/com/example/domain/enums/Gender.java new file mode 100644 index 0000000..2734dd4 --- /dev/null +++ b/src/main/java/com/example/domain/enums/Gender.java @@ -0,0 +1,5 @@ +package com.example.domain.enums; + +public enum Gender { + MALE, FEMALE +} diff --git a/src/main/java/com/example/domain/enums/MemberStatus.java b/src/main/java/com/example/domain/enums/MemberStatus.java new file mode 100644 index 0000000..3c8e850 --- /dev/null +++ b/src/main/java/com/example/domain/enums/MemberStatus.java @@ -0,0 +1,5 @@ +package com.example.domain.enums; + +public enum MemberStatus { + ACTIVE, INACTIVE +} diff --git a/src/main/java/com/example/domain/enums/MissionStatus.java b/src/main/java/com/example/domain/enums/MissionStatus.java new file mode 100644 index 0000000..f9ccbff --- /dev/null +++ b/src/main/java/com/example/domain/enums/MissionStatus.java @@ -0,0 +1,5 @@ +package com.example.domain.enums; + +public enum MissionStatus { + CHALLENGING, COMPLETE, +} diff --git a/src/main/java/com/example/domain/enums/SocialType.java b/src/main/java/com/example/domain/enums/SocialType.java new file mode 100644 index 0000000..3d4e9d6 --- /dev/null +++ b/src/main/java/com/example/domain/enums/SocialType.java @@ -0,0 +1,5 @@ +package com.example.domain.enums; + +public enum SocialType { + KAKAO, GOOGLE, NAVER, APPLE +} diff --git a/src/main/java/com/example/domain/mapping/MemberAgree.java b/src/main/java/com/example/domain/mapping/MemberAgree.java new file mode 100644 index 0000000..def3b84 --- /dev/null +++ b/src/main/java/com/example/domain/mapping/MemberAgree.java @@ -0,0 +1,30 @@ +package com.example.domain.mapping; + +import com.example.domain.Member; +import com.example.domain.Terms; +import com.example.domain.common.BaseEntity; + +import jakarta.persistence.*; + +import lombok.*; + +@Entity +@Getter +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor +public class MemberAgree extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "member_id") + private Member member; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "terms_id") + private Terms terms; + +} \ No newline at end of file diff --git a/src/main/java/com/example/domain/mapping/MemberMission.java b/src/main/java/com/example/domain/mapping/MemberMission.java new file mode 100644 index 0000000..47b7ee8 --- /dev/null +++ b/src/main/java/com/example/domain/mapping/MemberMission.java @@ -0,0 +1,34 @@ +package com.example.domain.mapping; + +import com.example.domain.common.BaseEntity; +import com.example.domain.enums.MissionStatus; +import com.example.domain.Member; +import com.example.domain.Mission; + +import jakarta.persistence.*; + +import lombok.*; + +@Entity +@Getter +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor +public class MemberMission extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Enumerated(EnumType.STRING) + @Column(columnDefinition = "VARCHAR(15) DEFAULT 'ACTIVE'") + private MissionStatus status; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "member_id") + private Member member; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "mission_id") + private Mission mission; +} diff --git a/src/main/java/com/example/domain/mapping/MemberPrefer.java b/src/main/java/com/example/domain/mapping/MemberPrefer.java new file mode 100644 index 0000000..23cb80f --- /dev/null +++ b/src/main/java/com/example/domain/mapping/MemberPrefer.java @@ -0,0 +1,34 @@ +package com.example.domain.mapping; + +import com.example.domain.FoodCategory; +import com.example.domain.Member; +import com.example.domain.common.BaseEntity; + +import jakarta.persistence.*; + +import lombok.Getter; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.AccessLevel; + +@Entity +@Getter +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor +public class MemberPrefer extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "member_id") + private Member member; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "category_id") + private FoodCategory foodCategory; + +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..bb2a42f --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,19 @@ +spring: + datasource: + url: jdbc:mysql://localhost:3306/study + username: root + password: yejin0618* + driver-class-name: com.mysql.cj.jdbc.Driver + sql: + init: + mode: never + jpa: + properties: + hibernate: + dialect: org.hibernate.dialect.MySQL8Dialect + show_sql: true + format_sql: true + use_sql_comments: true + hbm2ddl: + auto: create + default_batch_fetch_size: 1000 \ No newline at end of file diff --git a/src/test/java/umc/spring/ApplicationTests.java b/src/test/java/umc/spring/ApplicationTests.java new file mode 100644 index 0000000..dc36e6c --- /dev/null +++ b/src/test/java/umc/spring/ApplicationTests.java @@ -0,0 +1,13 @@ +package umc.spring; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class ApplicationTests { + + @Test + void contextLoads() { + } + +} From 0b07d98c92715f8b24708701bd3dd3d7b77a14f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=98=88=EC=A7=84=20=EB=B0=95?= Date: Tue, 6 May 2025 00:09:44 +0900 Subject: [PATCH 2/7] =?UTF-8?q?6=EC=A3=BC=EC=B0=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/domain/QFoodCategory.java | 47 ++++++++++++ .../generated/com/example/domain/QMember.java | 72 +++++++++++++++++++ .../com/example/domain/QMission.java | 70 ++++++++++++++++++ .../generated/com/example/domain/QRegion.java | 47 ++++++++++++ .../generated/com/example/domain/QReview.java | 63 ++++++++++++++++ .../generated/com/example/domain/QStore.java | 69 ++++++++++++++++++ .../generated/com/example/domain/QTerms.java | 54 ++++++++++++++ .../example/domain/common/QBaseEntity.java | 39 ++++++++++ .../example/domain/mapping/QMemberAgree.java | 62 ++++++++++++++++ .../domain/mapping/QMemberMission.java | 64 +++++++++++++++++ .../example/domain/mapping/QMemberPrefer.java | 62 ++++++++++++++++ .../java/com/example/StudyApplication.java | 36 ++++++++++ .../com/example/config/QueryDSLConfig.java | 19 +++++ src/main/java/com/example/domain/Store.java | 25 +++++++ .../StoreRepository/StoreRepository.java | 7 ++ .../StoreRepositoryCustom.java | 9 +++ .../StoreRepository/StoreRepositoryImpl.java | 35 +++++++++ .../StoreService/StoreQueryService.java | 11 +++ .../StoreService/StoreQueryServiceImpl.java | 31 ++++++++ src/main/resources/data.sql | 24 +++++++ 20 files changed, 846 insertions(+) create mode 100644 src/main/generated/com/example/domain/QFoodCategory.java create mode 100644 src/main/generated/com/example/domain/QMember.java create mode 100644 src/main/generated/com/example/domain/QMission.java create mode 100644 src/main/generated/com/example/domain/QRegion.java create mode 100644 src/main/generated/com/example/domain/QReview.java create mode 100644 src/main/generated/com/example/domain/QStore.java create mode 100644 src/main/generated/com/example/domain/QTerms.java create mode 100644 src/main/generated/com/example/domain/common/QBaseEntity.java create mode 100644 src/main/generated/com/example/domain/mapping/QMemberAgree.java create mode 100644 src/main/generated/com/example/domain/mapping/QMemberMission.java create mode 100644 src/main/generated/com/example/domain/mapping/QMemberPrefer.java create mode 100644 src/main/java/com/example/StudyApplication.java create mode 100644 src/main/java/com/example/config/QueryDSLConfig.java create mode 100644 src/main/java/com/example/repository/StoreRepository/StoreRepository.java create mode 100644 src/main/java/com/example/repository/StoreRepository/StoreRepositoryCustom.java create mode 100644 src/main/java/com/example/repository/StoreRepository/StoreRepositoryImpl.java create mode 100644 src/main/java/com/example/service/StoreService/StoreQueryService.java create mode 100644 src/main/java/com/example/service/StoreService/StoreQueryServiceImpl.java create mode 100644 src/main/resources/data.sql diff --git a/src/main/generated/com/example/domain/QFoodCategory.java b/src/main/generated/com/example/domain/QFoodCategory.java new file mode 100644 index 0000000..2559586 --- /dev/null +++ b/src/main/generated/com/example/domain/QFoodCategory.java @@ -0,0 +1,47 @@ +package com.example.domain; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; + + +/** + * QFoodCategory is a Querydsl query type for FoodCategory + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QFoodCategory extends EntityPathBase { + + private static final long serialVersionUID = -1774211307L; + + public static final QFoodCategory foodCategory = new QFoodCategory("foodCategory"); + + public final com.example.domain.common.QBaseEntity _super = new com.example.domain.common.QBaseEntity(this); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final NumberPath id = createNumber("id", Long.class); + + public final StringPath name = createString("name"); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QFoodCategory(String variable) { + super(FoodCategory.class, forVariable(variable)); + } + + public QFoodCategory(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QFoodCategory(PathMetadata metadata) { + super(FoodCategory.class, metadata); + } + +} + diff --git a/src/main/generated/com/example/domain/QMember.java b/src/main/generated/com/example/domain/QMember.java new file mode 100644 index 0000000..2827182 --- /dev/null +++ b/src/main/generated/com/example/domain/QMember.java @@ -0,0 +1,72 @@ +package com.example.domain; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QMember is a Querydsl query type for Member + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QMember extends EntityPathBase { + + private static final long serialVersionUID = -1016450829L; + + public static final QMember member = new QMember("member1"); + + public final com.example.domain.common.QBaseEntity _super = new com.example.domain.common.QBaseEntity(this); + + public final StringPath address = createString("address"); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final StringPath email = createString("email"); + + public final EnumPath gender = createEnum("gender", com.example.domain.enums.Gender.class); + + public final NumberPath id = createNumber("id", Long.class); + + public final DatePath inactiveDate = createDate("inactiveDate", java.time.LocalDate.class); + + public final ListPath memberAgreeList = this.createList("memberAgreeList", com.example.domain.mapping.MemberAgree.class, com.example.domain.mapping.QMemberAgree.class, PathInits.DIRECT2); + + public final ListPath memberMissionList = this.createList("memberMissionList", com.example.domain.mapping.MemberMission.class, com.example.domain.mapping.QMemberMission.class, PathInits.DIRECT2); + + public final ListPath memberPreferList = this.createList("memberPreferList", com.example.domain.mapping.MemberPrefer.class, com.example.domain.mapping.QMemberPrefer.class, PathInits.DIRECT2); + + public final StringPath name = createString("name"); + + public final NumberPath point = createNumber("point", Integer.class); + + public final ListPath reviewList = this.createList("reviewList", Review.class, QReview.class, PathInits.DIRECT2); + + public final EnumPath socialType = createEnum("socialType", com.example.domain.enums.SocialType.class); + + public final StringPath specAddress = createString("specAddress"); + + public final EnumPath status = createEnum("status", com.example.domain.enums.MemberStatus.class); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QMember(String variable) { + super(Member.class, forVariable(variable)); + } + + public QMember(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QMember(PathMetadata metadata) { + super(Member.class, metadata); + } + +} + diff --git a/src/main/generated/com/example/domain/QMission.java b/src/main/generated/com/example/domain/QMission.java new file mode 100644 index 0000000..b5abb4f --- /dev/null +++ b/src/main/generated/com/example/domain/QMission.java @@ -0,0 +1,70 @@ +package com.example.domain; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QMission is a Querydsl query type for Mission + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QMission extends EntityPathBase { + + private static final long serialVersionUID = -1324636589L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QMission mission = new QMission("mission"); + + public final com.example.domain.common.QBaseEntity _super = new com.example.domain.common.QBaseEntity(this); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final DatePath deadline = createDate("deadline", java.time.LocalDate.class); + + public final NumberPath id = createNumber("id", Long.class); + + public final QMember member; + + public final ListPath memberMissionList = this.createList("memberMissionList", com.example.domain.mapping.MemberMission.class, com.example.domain.mapping.QMemberMission.class, PathInits.DIRECT2); + + public final StringPath missionSpec = createString("missionSpec"); + + public final NumberPath reward = createNumber("reward", Integer.class); + + public final QStore store; + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QMission(String variable) { + this(Mission.class, forVariable(variable), INITS); + } + + public QMission(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QMission(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QMission(PathMetadata metadata, PathInits inits) { + this(Mission.class, metadata, inits); + } + + public QMission(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.member = inits.isInitialized("member") ? new QMember(forProperty("member")) : null; + this.store = inits.isInitialized("store") ? new QStore(forProperty("store"), inits.get("store")) : null; + } + +} + diff --git a/src/main/generated/com/example/domain/QRegion.java b/src/main/generated/com/example/domain/QRegion.java new file mode 100644 index 0000000..7e64716 --- /dev/null +++ b/src/main/generated/com/example/domain/QRegion.java @@ -0,0 +1,47 @@ +package com.example.domain; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; + + +/** + * QRegion is a Querydsl query type for Region + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QRegion extends EntityPathBase { + + private static final long serialVersionUID = -873476787L; + + public static final QRegion region = new QRegion("region"); + + public final com.example.domain.common.QBaseEntity _super = new com.example.domain.common.QBaseEntity(this); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final NumberPath id = createNumber("id", Long.class); + + public final StringPath name = createString("name"); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QRegion(String variable) { + super(Region.class, forVariable(variable)); + } + + public QRegion(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QRegion(PathMetadata metadata) { + super(Region.class, metadata); + } + +} + diff --git a/src/main/generated/com/example/domain/QReview.java b/src/main/generated/com/example/domain/QReview.java new file mode 100644 index 0000000..1b9a73e --- /dev/null +++ b/src/main/generated/com/example/domain/QReview.java @@ -0,0 +1,63 @@ +package com.example.domain; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QReview is a Querydsl query type for Review + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QReview extends EntityPathBase { + + private static final long serialVersionUID = -873030223L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QReview review = new QReview("review"); + + public final com.example.domain.common.QBaseEntity _super = new com.example.domain.common.QBaseEntity(this); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final NumberPath id = createNumber("id", Long.class); + + public final QMember member; + + public final NumberPath score = createNumber("score", Float.class); + + public final StringPath title = createString("title"); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QReview(String variable) { + this(Review.class, forVariable(variable), INITS); + } + + public QReview(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QReview(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QReview(PathMetadata metadata, PathInits inits) { + this(Review.class, metadata, inits); + } + + public QReview(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.member = inits.isInitialized("member") ? new QMember(forProperty("member")) : null; + } + +} + diff --git a/src/main/generated/com/example/domain/QStore.java b/src/main/generated/com/example/domain/QStore.java new file mode 100644 index 0000000..f43706e --- /dev/null +++ b/src/main/generated/com/example/domain/QStore.java @@ -0,0 +1,69 @@ +package com.example.domain; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QStore is a Querydsl query type for Store + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QStore extends EntityPathBase { + + private static final long serialVersionUID = -996629656L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QStore store = new QStore("store"); + + public final com.example.domain.common.QBaseEntity _super = new com.example.domain.common.QBaseEntity(this); + + public final StringPath address = createString("address"); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final NumberPath id = createNumber("id", Long.class); + + public final ListPath missionList = this.createList("missionList", Mission.class, QMission.class, PathInits.DIRECT2); + + public final StringPath name = createString("name"); + + public final QRegion region; + + public final ListPath reviewList = this.createList("reviewList", Review.class, QReview.class, PathInits.DIRECT2); + + public final NumberPath score = createNumber("score", Float.class); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QStore(String variable) { + this(Store.class, forVariable(variable), INITS); + } + + public QStore(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QStore(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QStore(PathMetadata metadata, PathInits inits) { + this(Store.class, metadata, inits); + } + + public QStore(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.region = inits.isInitialized("region") ? new QRegion(forProperty("region")) : null; + } + +} + diff --git a/src/main/generated/com/example/domain/QTerms.java b/src/main/generated/com/example/domain/QTerms.java new file mode 100644 index 0000000..92a430f --- /dev/null +++ b/src/main/generated/com/example/domain/QTerms.java @@ -0,0 +1,54 @@ +package com.example.domain; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QTerms is a Querydsl query type for Terms + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QTerms extends EntityPathBase { + + private static final long serialVersionUID = -996150258L; + + public static final QTerms terms = new QTerms("terms"); + + public final com.example.domain.common.QBaseEntity _super = new com.example.domain.common.QBaseEntity(this); + + public final StringPath body = createString("body"); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final NumberPath id = createNumber("id", Long.class); + + public final ListPath memberAgreeList = this.createList("memberAgreeList", com.example.domain.mapping.MemberAgree.class, com.example.domain.mapping.QMemberAgree.class, PathInits.DIRECT2); + + public final BooleanPath optional = createBoolean("optional"); + + public final StringPath title = createString("title"); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QTerms(String variable) { + super(Terms.class, forVariable(variable)); + } + + public QTerms(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QTerms(PathMetadata metadata) { + super(Terms.class, metadata); + } + +} + diff --git a/src/main/generated/com/example/domain/common/QBaseEntity.java b/src/main/generated/com/example/domain/common/QBaseEntity.java new file mode 100644 index 0000000..b2097d3 --- /dev/null +++ b/src/main/generated/com/example/domain/common/QBaseEntity.java @@ -0,0 +1,39 @@ +package com.example.domain.common; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; + + +/** + * QBaseEntity is a Querydsl query type for BaseEntity + */ +@Generated("com.querydsl.codegen.DefaultSupertypeSerializer") +public class QBaseEntity extends EntityPathBase { + + private static final long serialVersionUID = 118984254L; + + public static final QBaseEntity baseEntity = new QBaseEntity("baseEntity"); + + public final DateTimePath createdAt = createDateTime("createdAt", java.time.LocalDateTime.class); + + public final DateTimePath updatedAt = createDateTime("updatedAt", java.time.LocalDateTime.class); + + public QBaseEntity(String variable) { + super(BaseEntity.class, forVariable(variable)); + } + + public QBaseEntity(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QBaseEntity(PathMetadata metadata) { + super(BaseEntity.class, metadata); + } + +} + diff --git a/src/main/generated/com/example/domain/mapping/QMemberAgree.java b/src/main/generated/com/example/domain/mapping/QMemberAgree.java new file mode 100644 index 0000000..f9b564e --- /dev/null +++ b/src/main/generated/com/example/domain/mapping/QMemberAgree.java @@ -0,0 +1,62 @@ +package com.example.domain.mapping; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QMemberAgree is a Querydsl query type for MemberAgree + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QMemberAgree extends EntityPathBase { + + private static final long serialVersionUID = 1811719513L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QMemberAgree memberAgree = new QMemberAgree("memberAgree"); + + public final com.example.domain.common.QBaseEntity _super = new com.example.domain.common.QBaseEntity(this); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final NumberPath id = createNumber("id", Long.class); + + public final com.example.domain.QMember member; + + public final com.example.domain.QTerms terms; + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QMemberAgree(String variable) { + this(MemberAgree.class, forVariable(variable), INITS); + } + + public QMemberAgree(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QMemberAgree(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QMemberAgree(PathMetadata metadata, PathInits inits) { + this(MemberAgree.class, metadata, inits); + } + + public QMemberAgree(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.member = inits.isInitialized("member") ? new com.example.domain.QMember(forProperty("member")) : null; + this.terms = inits.isInitialized("terms") ? new com.example.domain.QTerms(forProperty("terms")) : null; + } + +} + diff --git a/src/main/generated/com/example/domain/mapping/QMemberMission.java b/src/main/generated/com/example/domain/mapping/QMemberMission.java new file mode 100644 index 0000000..171a8e1 --- /dev/null +++ b/src/main/generated/com/example/domain/mapping/QMemberMission.java @@ -0,0 +1,64 @@ +package com.example.domain.mapping; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QMemberMission is a Querydsl query type for MemberMission + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QMemberMission extends EntityPathBase { + + private static final long serialVersionUID = -575554311L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QMemberMission memberMission = new QMemberMission("memberMission"); + + public final com.example.domain.common.QBaseEntity _super = new com.example.domain.common.QBaseEntity(this); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final NumberPath id = createNumber("id", Long.class); + + public final com.example.domain.QMember member; + + public final com.example.domain.QMission mission; + + public final EnumPath status = createEnum("status", com.example.domain.enums.MissionStatus.class); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QMemberMission(String variable) { + this(MemberMission.class, forVariable(variable), INITS); + } + + public QMemberMission(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QMemberMission(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QMemberMission(PathMetadata metadata, PathInits inits) { + this(MemberMission.class, metadata, inits); + } + + public QMemberMission(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.member = inits.isInitialized("member") ? new com.example.domain.QMember(forProperty("member")) : null; + this.mission = inits.isInitialized("mission") ? new com.example.domain.QMission(forProperty("mission"), inits.get("mission")) : null; + } + +} + diff --git a/src/main/generated/com/example/domain/mapping/QMemberPrefer.java b/src/main/generated/com/example/domain/mapping/QMemberPrefer.java new file mode 100644 index 0000000..65ec1e0 --- /dev/null +++ b/src/main/generated/com/example/domain/mapping/QMemberPrefer.java @@ -0,0 +1,62 @@ +package com.example.domain.mapping; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QMemberPrefer is a Querydsl query type for MemberPrefer + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QMemberPrefer extends EntityPathBase { + + private static final long serialVersionUID = 767939843L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QMemberPrefer memberPrefer = new QMemberPrefer("memberPrefer"); + + public final com.example.domain.common.QBaseEntity _super = new com.example.domain.common.QBaseEntity(this); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final com.example.domain.QFoodCategory foodCategory; + + public final NumberPath id = createNumber("id", Long.class); + + public final com.example.domain.QMember member; + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QMemberPrefer(String variable) { + this(MemberPrefer.class, forVariable(variable), INITS); + } + + public QMemberPrefer(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QMemberPrefer(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QMemberPrefer(PathMetadata metadata, PathInits inits) { + this(MemberPrefer.class, metadata, inits); + } + + public QMemberPrefer(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.foodCategory = inits.isInitialized("foodCategory") ? new com.example.domain.QFoodCategory(forProperty("foodCategory")) : null; + this.member = inits.isInitialized("member") ? new com.example.domain.QMember(forProperty("member")) : null; + } + +} + diff --git a/src/main/java/com/example/StudyApplication.java b/src/main/java/com/example/StudyApplication.java new file mode 100644 index 0000000..e9a8e82 --- /dev/null +++ b/src/main/java/com/example/StudyApplication.java @@ -0,0 +1,36 @@ +package com.example; + +import com.example.service.StoreService.StoreQueryService; +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; + +@SpringBootApplication +@EnableJpaAuditing +public class StudyApplication { + public static void main(String[] args) { + SpringApplication.run(StudyApplication.class, args); + } + + @Bean + public CommandLineRunner run(ApplicationContext context) { + return args -> { + StoreQueryService storeService = context.getBean(StoreQueryService.class); + + // 파라미터 값 설정 + String name = "요아정"; + Float score = 4.0f; + + // 쿼리 메서드 호출 및 쿼리 문자열과 파라미터 출력 + System.out.println("Executing findStoresByNameAndScore with parameters:"); + System.out.println("Name: " + name); + System.out.println("Score: " + score); + + storeService.findStoresByNameAndScore(name, score) + .forEach(System.out::println); + }; + } +} diff --git a/src/main/java/com/example/config/QueryDSLConfig.java b/src/main/java/com/example/config/QueryDSLConfig.java new file mode 100644 index 0000000..01074a1 --- /dev/null +++ b/src/main/java/com/example/config/QueryDSLConfig.java @@ -0,0 +1,19 @@ +package com.example.config; + +import com.querydsl.jpa.impl.JPAQueryFactory; +import jakarta.persistence.EntityManager; +import lombok.RequiredArgsConstructor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +@RequiredArgsConstructor +public class QueryDSLConfig { + + private final EntityManager entityManager; + + @Bean + public JPAQueryFactory jpaQueryFactory(){ + return new JPAQueryFactory(entityManager); + } +} diff --git a/src/main/java/com/example/domain/Store.java b/src/main/java/com/example/domain/Store.java index 6bee24e..ee4fdc0 100644 --- a/src/main/java/com/example/domain/Store.java +++ b/src/main/java/com/example/domain/Store.java @@ -10,6 +10,9 @@ import lombok.AllArgsConstructor; import lombok.AccessLevel; +import java.util.ArrayList; +import java.util.List; + @Entity @Getter @Builder @@ -28,4 +31,26 @@ public class Store extends BaseEntity { private String address; private Float score; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "region_id") + private Region region; + + @OneToMany(mappedBy = "store", cascade = CascadeType.ALL) + private List missionList = new ArrayList<>(); + + @OneToMany(mappedBy = "store", cascade = CascadeType.ALL) + private List reviewList = new ArrayList<>(); + + @Override + public String toString() { + return "Store{" + + "id=" + id + + ", name='" + name + '\'' + + ", address='" + address + '\'' + + ", score=" + score + + ", region=" + (region != null ? region.getName() : "N/A") + // region의 이름 출력 + '}'; + } + } diff --git a/src/main/java/com/example/repository/StoreRepository/StoreRepository.java b/src/main/java/com/example/repository/StoreRepository/StoreRepository.java new file mode 100644 index 0000000..6988e8c --- /dev/null +++ b/src/main/java/com/example/repository/StoreRepository/StoreRepository.java @@ -0,0 +1,7 @@ +package com.example.repository.StoreRepository; + +import com.example.domain.Store; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface StoreRepository extends JpaRepository, StoreRepositoryCustom { +} \ No newline at end of file diff --git a/src/main/java/com/example/repository/StoreRepository/StoreRepositoryCustom.java b/src/main/java/com/example/repository/StoreRepository/StoreRepositoryCustom.java new file mode 100644 index 0000000..18e65e0 --- /dev/null +++ b/src/main/java/com/example/repository/StoreRepository/StoreRepositoryCustom.java @@ -0,0 +1,9 @@ +package com.example.repository.StoreRepository; + +import com.example.domain.Store; +import java.util.List; + + +public interface StoreRepositoryCustom { + List dynamicQueryWithBooleanBuilder(String name, Float score); +} \ No newline at end of file diff --git a/src/main/java/com/example/repository/StoreRepository/StoreRepositoryImpl.java b/src/main/java/com/example/repository/StoreRepository/StoreRepositoryImpl.java new file mode 100644 index 0000000..659d19d --- /dev/null +++ b/src/main/java/com/example/repository/StoreRepository/StoreRepositoryImpl.java @@ -0,0 +1,35 @@ +package com.example.repository.StoreRepository; + +import com.querydsl.core.BooleanBuilder; +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; +import com.example.domain.QStore; +import com.example.domain.Store; + +import java.util.List; + +@Repository +@RequiredArgsConstructor +public class StoreRepositoryImpl implements StoreRepositoryCustom{ + private final JPAQueryFactory jpaQueryFactory; + private final QStore store = QStore.store; + + @Override + public List dynamicQueryWithBooleanBuilder(String name, Float score) { + BooleanBuilder predicate = new BooleanBuilder(); + + if (name != null) { + predicate.and(store.name.eq(name)); + } + + if (score != null) { + predicate.and(store.score.goe(4.0f)); + } + + return jpaQueryFactory + .selectFrom(store) + .where(predicate) + .fetch(); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/service/StoreService/StoreQueryService.java b/src/main/java/com/example/service/StoreService/StoreQueryService.java new file mode 100644 index 0000000..68a1bcf --- /dev/null +++ b/src/main/java/com/example/service/StoreService/StoreQueryService.java @@ -0,0 +1,11 @@ +package com.example.service.StoreService; + +import com.example.domain.Store; + +import java.util.List; +import java.util.Optional; + +public interface StoreQueryService { + Optional findStore(Long id); + List findStoresByNameAndScore(String name, Float score); + } diff --git a/src/main/java/com/example/service/StoreService/StoreQueryServiceImpl.java b/src/main/java/com/example/service/StoreService/StoreQueryServiceImpl.java new file mode 100644 index 0000000..13a5b68 --- /dev/null +++ b/src/main/java/com/example/service/StoreService/StoreQueryServiceImpl.java @@ -0,0 +1,31 @@ +package com.example.service.StoreService; + +import com.example.domain.Store; +import com.example.repository.StoreRepository.StoreRepository; +import jakarta.transaction.Transactional; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +@Service +@RequiredArgsConstructor +@Transactional +public class StoreQueryServiceImpl implements StoreQueryService{ + private final StoreRepository storeRepository; + + @Override + public Optional findStore(Long id) { + return storeRepository.findById(id); + } + + @Override + public List findStoresByNameAndScore(String name, Float score) { + List filteredStores = storeRepository.dynamicQueryWithBooleanBuilder(name, score); + + filteredStores.forEach(store -> System.out.println("Store: " + store)); + + return filteredStores; + } +} diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql new file mode 100644 index 0000000..ff47487 --- /dev/null +++ b/src/main/resources/data.sql @@ -0,0 +1,24 @@ +INSERT INTO region (id, name, created_at, updated_at) +VALUES (1, '서울', NOW(), NOW()), + (2, '부산', NOW(), NOW()), + (3, '인천', NOW(), NOW()); + +INSERT INTO store (id, name, address, score, region_id, created_at, updated_at) +VALUES (1, 'Store 1', '서울시 서대문구 이화여대길 52', 4.5, 1, NOW(), NOW()), + (2, 'Store 2', '서울시 마포구 연남동', 3.8, 1, NOW(), NOW()), + (3, 'Store 3', '서울시 동작구 흑석동', 2.2, 1, NOW(), NOW()), + (4, '요아정', '서울시 용산구 이태원동', 4.0, 1, NOW(), NOW()), + (5, '요아정', '서울시 서대문구 이화여대길 52', 3.2, 1, NOW(), NOW()), + (6, '요아정', '서울시 강남구 대치동', 4.5, 1, NOW(), NOW()); + +INSERT INTO mission (id, mission_spec, store_id, created_at, updated_at) +VALUES (1, 'Store 1-미션 1', 1, NOW(), NOW()), + (2, 'Store 1-미션 2', 1, NOW(), NOW()), + (3, 'Store 2-미션 1', 2, NOW(), NOW()), + (4, 'Store 3-미션 1', 3, NOW(), NOW()); + +INSERT INTO review (id, body, score, store_id, created_at, updated_at) +VALUES (1, '너무 좋아요!', 5.0, 1, NOW(), NOW()), + (2, '분위기 짱~', 3.0, 1, NOW(), NOW()), + (3, '서비스가 좋습니다', 4.8, 2, NOW(), NOW()), + (4, '음식이 맛있고 사장님이 친절해요', 4.5, 3, NOW(), NOW()); From 84745cdcdbe10fa4ca35b04e35d0935346bc2811 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=98=88=EC=A7=84=20=EB=B0=95?= Date: Mon, 12 May 2025 22:49:09 +0900 Subject: [PATCH 3/7] =?UTF-8?q?7=EC=A3=BC=EC=B0=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 31 ++++- .../com/example/domain/QFoodCategory.java | 47 ------- .../generated/com/example/domain/QMember.java | 72 ----------- .../com/example/domain/QMission.java | 70 ----------- .../generated/com/example/domain/QRegion.java | 47 ------- .../generated/com/example/domain/QReview.java | 63 ---------- .../generated/com/example/domain/QStore.java | 69 ---------- .../generated/com/example/domain/QTerms.java | 54 -------- .../example/domain/common/QBaseEntity.java | 39 ------ .../example/domain/mapping/QMemberAgree.java | 62 --------- .../domain/mapping/QMemberMission.java | 64 ---------- .../example/domain/mapping/QMemberPrefer.java | 62 --------- .../java/com/example/StudyApplication.java | 72 +++++------ .../com/example/apiPayload/ApiResponse.java | 38 ++++++ .../java/com/example/apiPayload/BaseCode.java | 10 ++ .../com/example/apiPayload/BaseErrorCode.java | 7 ++ .../example/apiPayload/ErrorReasonDTO.java | 18 +++ .../com/example/apiPayload/ReasonDTO.java | 18 +++ .../apiPayload/code/status/ErrorStatus.java | 52 ++++++++ .../apiPayload/code/status/SuccessStatus.java | 39 ++++++ .../apiPayload/exception/ExceptionAdvice.java | 119 ++++++++++++++++++ .../exception/GeneralException.java | 21 ++++ .../exception/handler/TempHandler.java | 11 ++ .../com/example/config/QueryDSLConfig.java | 5 +- .../com/example/converter/TempConverter.java | 17 +++ src/main/java/com/example/domain/Review.java | 4 + .../TempService/TempCommandService.java | 4 + .../TempService/TempCommandServiceImpl.java | 10 ++ .../service/TempService/TempQueryService.java | 5 + .../TempService/TempQueryServiceImpl.java | 17 +++ .../web/controller/TempRestController.java | 31 +++++ .../java/com/example/web/dto/TempRequest.java | 4 + .../com/example/web/dto/TempResponse.java | 25 ++++ 33 files changed, 516 insertions(+), 691 deletions(-) delete mode 100644 src/main/generated/com/example/domain/QFoodCategory.java delete mode 100644 src/main/generated/com/example/domain/QMember.java delete mode 100644 src/main/generated/com/example/domain/QMission.java delete mode 100644 src/main/generated/com/example/domain/QRegion.java delete mode 100644 src/main/generated/com/example/domain/QReview.java delete mode 100644 src/main/generated/com/example/domain/QStore.java delete mode 100644 src/main/generated/com/example/domain/QTerms.java delete mode 100644 src/main/generated/com/example/domain/common/QBaseEntity.java delete mode 100644 src/main/generated/com/example/domain/mapping/QMemberAgree.java delete mode 100644 src/main/generated/com/example/domain/mapping/QMemberMission.java delete mode 100644 src/main/generated/com/example/domain/mapping/QMemberPrefer.java create mode 100644 src/main/java/com/example/apiPayload/ApiResponse.java create mode 100644 src/main/java/com/example/apiPayload/BaseCode.java create mode 100644 src/main/java/com/example/apiPayload/BaseErrorCode.java create mode 100644 src/main/java/com/example/apiPayload/ErrorReasonDTO.java create mode 100644 src/main/java/com/example/apiPayload/ReasonDTO.java create mode 100644 src/main/java/com/example/apiPayload/code/status/ErrorStatus.java create mode 100644 src/main/java/com/example/apiPayload/code/status/SuccessStatus.java create mode 100644 src/main/java/com/example/apiPayload/exception/ExceptionAdvice.java create mode 100644 src/main/java/com/example/apiPayload/exception/GeneralException.java create mode 100644 src/main/java/com/example/apiPayload/exception/handler/TempHandler.java create mode 100644 src/main/java/com/example/converter/TempConverter.java create mode 100644 src/main/java/com/example/service/TempService/TempCommandService.java create mode 100644 src/main/java/com/example/service/TempService/TempCommandServiceImpl.java create mode 100644 src/main/java/com/example/service/TempService/TempQueryService.java create mode 100644 src/main/java/com/example/service/TempService/TempQueryServiceImpl.java create mode 100644 src/main/java/com/example/web/controller/TempRestController.java create mode 100644 src/main/java/com/example/web/dto/TempRequest.java create mode 100644 src/main/java/com/example/web/dto/TempResponse.java diff --git a/build.gradle b/build.gradle index 504afbc..3ba1fcb 100644 --- a/build.gradle +++ b/build.gradle @@ -4,8 +4,9 @@ plugins { id 'io.spring.dependency-management' version '1.1.7' } -group = 'umc' +group = 'com.example' version = '0.0.1-SNAPSHOT' +sourceCompatibility = '17' java { toolchain { @@ -24,15 +25,39 @@ repositories { } dependencies { + // Spring Boot implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-validation' + implementation 'org.hibernate.validator:hibernate-validator:8.0.1.Final' // 명시적 추가 + + + // Lombok compileOnly 'org.projectlombok:lombok' - runtimeOnly 'com.mysql:mysql-connector-j' annotationProcessor 'org.projectlombok:lombok' + + // MySQL + runtimeOnly 'com.mysql:mysql-connector-j' + + // QueryDSL (jakarta 버전, Hibernate 6 이상 호환) + implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' + annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jakarta' + annotationProcessor 'jakarta.annotation:jakarta.annotation-api' + annotationProcessor 'jakarta.persistence:jakarta.persistence-api' + + // 테스트 testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' } +sourceSets { + main { + java { + srcDirs = ['src/main/java', 'src/main/resources'] + } + } +} + tasks.named('test') { useJUnitPlatform() -} +} \ No newline at end of file diff --git a/src/main/generated/com/example/domain/QFoodCategory.java b/src/main/generated/com/example/domain/QFoodCategory.java deleted file mode 100644 index 2559586..0000000 --- a/src/main/generated/com/example/domain/QFoodCategory.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.example.domain; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; - - -/** - * QFoodCategory is a Querydsl query type for FoodCategory - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QFoodCategory extends EntityPathBase { - - private static final long serialVersionUID = -1774211307L; - - public static final QFoodCategory foodCategory = new QFoodCategory("foodCategory"); - - public final com.example.domain.common.QBaseEntity _super = new com.example.domain.common.QBaseEntity(this); - - //inherited - public final DateTimePath createdAt = _super.createdAt; - - public final NumberPath id = createNumber("id", Long.class); - - public final StringPath name = createString("name"); - - //inherited - public final DateTimePath updatedAt = _super.updatedAt; - - public QFoodCategory(String variable) { - super(FoodCategory.class, forVariable(variable)); - } - - public QFoodCategory(Path path) { - super(path.getType(), path.getMetadata()); - } - - public QFoodCategory(PathMetadata metadata) { - super(FoodCategory.class, metadata); - } - -} - diff --git a/src/main/generated/com/example/domain/QMember.java b/src/main/generated/com/example/domain/QMember.java deleted file mode 100644 index 2827182..0000000 --- a/src/main/generated/com/example/domain/QMember.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.example.domain; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QMember is a Querydsl query type for Member - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QMember extends EntityPathBase { - - private static final long serialVersionUID = -1016450829L; - - public static final QMember member = new QMember("member1"); - - public final com.example.domain.common.QBaseEntity _super = new com.example.domain.common.QBaseEntity(this); - - public final StringPath address = createString("address"); - - //inherited - public final DateTimePath createdAt = _super.createdAt; - - public final StringPath email = createString("email"); - - public final EnumPath gender = createEnum("gender", com.example.domain.enums.Gender.class); - - public final NumberPath id = createNumber("id", Long.class); - - public final DatePath inactiveDate = createDate("inactiveDate", java.time.LocalDate.class); - - public final ListPath memberAgreeList = this.createList("memberAgreeList", com.example.domain.mapping.MemberAgree.class, com.example.domain.mapping.QMemberAgree.class, PathInits.DIRECT2); - - public final ListPath memberMissionList = this.createList("memberMissionList", com.example.domain.mapping.MemberMission.class, com.example.domain.mapping.QMemberMission.class, PathInits.DIRECT2); - - public final ListPath memberPreferList = this.createList("memberPreferList", com.example.domain.mapping.MemberPrefer.class, com.example.domain.mapping.QMemberPrefer.class, PathInits.DIRECT2); - - public final StringPath name = createString("name"); - - public final NumberPath point = createNumber("point", Integer.class); - - public final ListPath reviewList = this.createList("reviewList", Review.class, QReview.class, PathInits.DIRECT2); - - public final EnumPath socialType = createEnum("socialType", com.example.domain.enums.SocialType.class); - - public final StringPath specAddress = createString("specAddress"); - - public final EnumPath status = createEnum("status", com.example.domain.enums.MemberStatus.class); - - //inherited - public final DateTimePath updatedAt = _super.updatedAt; - - public QMember(String variable) { - super(Member.class, forVariable(variable)); - } - - public QMember(Path path) { - super(path.getType(), path.getMetadata()); - } - - public QMember(PathMetadata metadata) { - super(Member.class, metadata); - } - -} - diff --git a/src/main/generated/com/example/domain/QMission.java b/src/main/generated/com/example/domain/QMission.java deleted file mode 100644 index b5abb4f..0000000 --- a/src/main/generated/com/example/domain/QMission.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.example.domain; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QMission is a Querydsl query type for Mission - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QMission extends EntityPathBase { - - private static final long serialVersionUID = -1324636589L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QMission mission = new QMission("mission"); - - public final com.example.domain.common.QBaseEntity _super = new com.example.domain.common.QBaseEntity(this); - - //inherited - public final DateTimePath createdAt = _super.createdAt; - - public final DatePath deadline = createDate("deadline", java.time.LocalDate.class); - - public final NumberPath id = createNumber("id", Long.class); - - public final QMember member; - - public final ListPath memberMissionList = this.createList("memberMissionList", com.example.domain.mapping.MemberMission.class, com.example.domain.mapping.QMemberMission.class, PathInits.DIRECT2); - - public final StringPath missionSpec = createString("missionSpec"); - - public final NumberPath reward = createNumber("reward", Integer.class); - - public final QStore store; - - //inherited - public final DateTimePath updatedAt = _super.updatedAt; - - public QMission(String variable) { - this(Mission.class, forVariable(variable), INITS); - } - - public QMission(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QMission(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QMission(PathMetadata metadata, PathInits inits) { - this(Mission.class, metadata, inits); - } - - public QMission(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.member = inits.isInitialized("member") ? new QMember(forProperty("member")) : null; - this.store = inits.isInitialized("store") ? new QStore(forProperty("store"), inits.get("store")) : null; - } - -} - diff --git a/src/main/generated/com/example/domain/QRegion.java b/src/main/generated/com/example/domain/QRegion.java deleted file mode 100644 index 7e64716..0000000 --- a/src/main/generated/com/example/domain/QRegion.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.example.domain; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; - - -/** - * QRegion is a Querydsl query type for Region - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QRegion extends EntityPathBase { - - private static final long serialVersionUID = -873476787L; - - public static final QRegion region = new QRegion("region"); - - public final com.example.domain.common.QBaseEntity _super = new com.example.domain.common.QBaseEntity(this); - - //inherited - public final DateTimePath createdAt = _super.createdAt; - - public final NumberPath id = createNumber("id", Long.class); - - public final StringPath name = createString("name"); - - //inherited - public final DateTimePath updatedAt = _super.updatedAt; - - public QRegion(String variable) { - super(Region.class, forVariable(variable)); - } - - public QRegion(Path path) { - super(path.getType(), path.getMetadata()); - } - - public QRegion(PathMetadata metadata) { - super(Region.class, metadata); - } - -} - diff --git a/src/main/generated/com/example/domain/QReview.java b/src/main/generated/com/example/domain/QReview.java deleted file mode 100644 index 1b9a73e..0000000 --- a/src/main/generated/com/example/domain/QReview.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.example.domain; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QReview is a Querydsl query type for Review - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QReview extends EntityPathBase { - - private static final long serialVersionUID = -873030223L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QReview review = new QReview("review"); - - public final com.example.domain.common.QBaseEntity _super = new com.example.domain.common.QBaseEntity(this); - - //inherited - public final DateTimePath createdAt = _super.createdAt; - - public final NumberPath id = createNumber("id", Long.class); - - public final QMember member; - - public final NumberPath score = createNumber("score", Float.class); - - public final StringPath title = createString("title"); - - //inherited - public final DateTimePath updatedAt = _super.updatedAt; - - public QReview(String variable) { - this(Review.class, forVariable(variable), INITS); - } - - public QReview(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QReview(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QReview(PathMetadata metadata, PathInits inits) { - this(Review.class, metadata, inits); - } - - public QReview(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.member = inits.isInitialized("member") ? new QMember(forProperty("member")) : null; - } - -} - diff --git a/src/main/generated/com/example/domain/QStore.java b/src/main/generated/com/example/domain/QStore.java deleted file mode 100644 index f43706e..0000000 --- a/src/main/generated/com/example/domain/QStore.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.example.domain; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QStore is a Querydsl query type for Store - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QStore extends EntityPathBase { - - private static final long serialVersionUID = -996629656L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QStore store = new QStore("store"); - - public final com.example.domain.common.QBaseEntity _super = new com.example.domain.common.QBaseEntity(this); - - public final StringPath address = createString("address"); - - //inherited - public final DateTimePath createdAt = _super.createdAt; - - public final NumberPath id = createNumber("id", Long.class); - - public final ListPath missionList = this.createList("missionList", Mission.class, QMission.class, PathInits.DIRECT2); - - public final StringPath name = createString("name"); - - public final QRegion region; - - public final ListPath reviewList = this.createList("reviewList", Review.class, QReview.class, PathInits.DIRECT2); - - public final NumberPath score = createNumber("score", Float.class); - - //inherited - public final DateTimePath updatedAt = _super.updatedAt; - - public QStore(String variable) { - this(Store.class, forVariable(variable), INITS); - } - - public QStore(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QStore(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QStore(PathMetadata metadata, PathInits inits) { - this(Store.class, metadata, inits); - } - - public QStore(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.region = inits.isInitialized("region") ? new QRegion(forProperty("region")) : null; - } - -} - diff --git a/src/main/generated/com/example/domain/QTerms.java b/src/main/generated/com/example/domain/QTerms.java deleted file mode 100644 index 92a430f..0000000 --- a/src/main/generated/com/example/domain/QTerms.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.example.domain; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QTerms is a Querydsl query type for Terms - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QTerms extends EntityPathBase { - - private static final long serialVersionUID = -996150258L; - - public static final QTerms terms = new QTerms("terms"); - - public final com.example.domain.common.QBaseEntity _super = new com.example.domain.common.QBaseEntity(this); - - public final StringPath body = createString("body"); - - //inherited - public final DateTimePath createdAt = _super.createdAt; - - public final NumberPath id = createNumber("id", Long.class); - - public final ListPath memberAgreeList = this.createList("memberAgreeList", com.example.domain.mapping.MemberAgree.class, com.example.domain.mapping.QMemberAgree.class, PathInits.DIRECT2); - - public final BooleanPath optional = createBoolean("optional"); - - public final StringPath title = createString("title"); - - //inherited - public final DateTimePath updatedAt = _super.updatedAt; - - public QTerms(String variable) { - super(Terms.class, forVariable(variable)); - } - - public QTerms(Path path) { - super(path.getType(), path.getMetadata()); - } - - public QTerms(PathMetadata metadata) { - super(Terms.class, metadata); - } - -} - diff --git a/src/main/generated/com/example/domain/common/QBaseEntity.java b/src/main/generated/com/example/domain/common/QBaseEntity.java deleted file mode 100644 index b2097d3..0000000 --- a/src/main/generated/com/example/domain/common/QBaseEntity.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.example.domain.common; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; - - -/** - * QBaseEntity is a Querydsl query type for BaseEntity - */ -@Generated("com.querydsl.codegen.DefaultSupertypeSerializer") -public class QBaseEntity extends EntityPathBase { - - private static final long serialVersionUID = 118984254L; - - public static final QBaseEntity baseEntity = new QBaseEntity("baseEntity"); - - public final DateTimePath createdAt = createDateTime("createdAt", java.time.LocalDateTime.class); - - public final DateTimePath updatedAt = createDateTime("updatedAt", java.time.LocalDateTime.class); - - public QBaseEntity(String variable) { - super(BaseEntity.class, forVariable(variable)); - } - - public QBaseEntity(Path path) { - super(path.getType(), path.getMetadata()); - } - - public QBaseEntity(PathMetadata metadata) { - super(BaseEntity.class, metadata); - } - -} - diff --git a/src/main/generated/com/example/domain/mapping/QMemberAgree.java b/src/main/generated/com/example/domain/mapping/QMemberAgree.java deleted file mode 100644 index f9b564e..0000000 --- a/src/main/generated/com/example/domain/mapping/QMemberAgree.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.example.domain.mapping; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QMemberAgree is a Querydsl query type for MemberAgree - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QMemberAgree extends EntityPathBase { - - private static final long serialVersionUID = 1811719513L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QMemberAgree memberAgree = new QMemberAgree("memberAgree"); - - public final com.example.domain.common.QBaseEntity _super = new com.example.domain.common.QBaseEntity(this); - - //inherited - public final DateTimePath createdAt = _super.createdAt; - - public final NumberPath id = createNumber("id", Long.class); - - public final com.example.domain.QMember member; - - public final com.example.domain.QTerms terms; - - //inherited - public final DateTimePath updatedAt = _super.updatedAt; - - public QMemberAgree(String variable) { - this(MemberAgree.class, forVariable(variable), INITS); - } - - public QMemberAgree(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QMemberAgree(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QMemberAgree(PathMetadata metadata, PathInits inits) { - this(MemberAgree.class, metadata, inits); - } - - public QMemberAgree(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.member = inits.isInitialized("member") ? new com.example.domain.QMember(forProperty("member")) : null; - this.terms = inits.isInitialized("terms") ? new com.example.domain.QTerms(forProperty("terms")) : null; - } - -} - diff --git a/src/main/generated/com/example/domain/mapping/QMemberMission.java b/src/main/generated/com/example/domain/mapping/QMemberMission.java deleted file mode 100644 index 171a8e1..0000000 --- a/src/main/generated/com/example/domain/mapping/QMemberMission.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.example.domain.mapping; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QMemberMission is a Querydsl query type for MemberMission - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QMemberMission extends EntityPathBase { - - private static final long serialVersionUID = -575554311L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QMemberMission memberMission = new QMemberMission("memberMission"); - - public final com.example.domain.common.QBaseEntity _super = new com.example.domain.common.QBaseEntity(this); - - //inherited - public final DateTimePath createdAt = _super.createdAt; - - public final NumberPath id = createNumber("id", Long.class); - - public final com.example.domain.QMember member; - - public final com.example.domain.QMission mission; - - public final EnumPath status = createEnum("status", com.example.domain.enums.MissionStatus.class); - - //inherited - public final DateTimePath updatedAt = _super.updatedAt; - - public QMemberMission(String variable) { - this(MemberMission.class, forVariable(variable), INITS); - } - - public QMemberMission(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QMemberMission(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QMemberMission(PathMetadata metadata, PathInits inits) { - this(MemberMission.class, metadata, inits); - } - - public QMemberMission(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.member = inits.isInitialized("member") ? new com.example.domain.QMember(forProperty("member")) : null; - this.mission = inits.isInitialized("mission") ? new com.example.domain.QMission(forProperty("mission"), inits.get("mission")) : null; - } - -} - diff --git a/src/main/generated/com/example/domain/mapping/QMemberPrefer.java b/src/main/generated/com/example/domain/mapping/QMemberPrefer.java deleted file mode 100644 index 65ec1e0..0000000 --- a/src/main/generated/com/example/domain/mapping/QMemberPrefer.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.example.domain.mapping; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QMemberPrefer is a Querydsl query type for MemberPrefer - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QMemberPrefer extends EntityPathBase { - - private static final long serialVersionUID = 767939843L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QMemberPrefer memberPrefer = new QMemberPrefer("memberPrefer"); - - public final com.example.domain.common.QBaseEntity _super = new com.example.domain.common.QBaseEntity(this); - - //inherited - public final DateTimePath createdAt = _super.createdAt; - - public final com.example.domain.QFoodCategory foodCategory; - - public final NumberPath id = createNumber("id", Long.class); - - public final com.example.domain.QMember member; - - //inherited - public final DateTimePath updatedAt = _super.updatedAt; - - public QMemberPrefer(String variable) { - this(MemberPrefer.class, forVariable(variable), INITS); - } - - public QMemberPrefer(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QMemberPrefer(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QMemberPrefer(PathMetadata metadata, PathInits inits) { - this(MemberPrefer.class, metadata, inits); - } - - public QMemberPrefer(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.foodCategory = inits.isInitialized("foodCategory") ? new com.example.domain.QFoodCategory(forProperty("foodCategory")) : null; - this.member = inits.isInitialized("member") ? new com.example.domain.QMember(forProperty("member")) : null; - } - -} - diff --git a/src/main/java/com/example/StudyApplication.java b/src/main/java/com/example/StudyApplication.java index e9a8e82..08f409f 100644 --- a/src/main/java/com/example/StudyApplication.java +++ b/src/main/java/com/example/StudyApplication.java @@ -1,36 +1,36 @@ -package com.example; - -import com.example.service.StoreService.StoreQueryService; -import org.springframework.boot.CommandLineRunner; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.Bean; -import org.springframework.data.jpa.repository.config.EnableJpaAuditing; - -@SpringBootApplication -@EnableJpaAuditing -public class StudyApplication { - public static void main(String[] args) { - SpringApplication.run(StudyApplication.class, args); - } - - @Bean - public CommandLineRunner run(ApplicationContext context) { - return args -> { - StoreQueryService storeService = context.getBean(StoreQueryService.class); - - // 파라미터 값 설정 - String name = "요아정"; - Float score = 4.0f; - - // 쿼리 메서드 호출 및 쿼리 문자열과 파라미터 출력 - System.out.println("Executing findStoresByNameAndScore with parameters:"); - System.out.println("Name: " + name); - System.out.println("Score: " + score); - - storeService.findStoresByNameAndScore(name, score) - .forEach(System.out::println); - }; - } -} +//package com.example; +// +//import com.example.service.StoreService.StoreQueryService; +//import org.springframework.boot.CommandLineRunner; +//import org.springframework.boot.SpringApplication; +//import org.springframework.boot.autoconfigure.SpringBootApplication; +//import org.springframework.context.ApplicationContext; +//import org.springframework.context.annotation.Bean; +//import org.springframework.data.jpa.repository.config.EnableJpaAuditing; +// +//@SpringBootApplication +//@EnableJpaAuditing +//public class StudyApplication { +// public static void main(String[] args) { +// SpringApplication.run(StudyApplication.class, args); +// } +// +// @Bean +// public CommandLineRunner run(ApplicationContext context) { +// return args -> { +// StoreQueryService storeService = context.getBean(StoreQueryService.class); +// +// // 파라미터 값 설정 +// String name = "요아정"; +// Float score = 4.0f; +// +// // 쿼리 메서드 호출 및 쿼리 문자열과 파라미터 출력 +// System.out.println("Executing findStoresByNameAndScore with parameters:"); +// System.out.println("Name: " + name); +// System.out.println("Score: " + score); +// +// storeService.findStoresByNameAndScore(name, score) +// .forEach(System.out::println); +// }; +// } +//} diff --git a/src/main/java/com/example/apiPayload/ApiResponse.java b/src/main/java/com/example/apiPayload/ApiResponse.java new file mode 100644 index 0000000..6be8217 --- /dev/null +++ b/src/main/java/com/example/apiPayload/ApiResponse.java @@ -0,0 +1,38 @@ +package com.example.apiPayload; + +import com.example.apiPayload.code.status.SuccessStatus; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +@JsonPropertyOrder({"isSuccess", "code", "message", "result"}) +public class ApiResponse { + + @JsonProperty("isSuccess") + private final Boolean isSuccess; + private final String code; + private final String message; + @JsonInclude(JsonInclude.Include.NON_NULL) + private T result; + + + // 성공한 경우 응답 생성 + + public static ApiResponse onSuccess(T result){ + return new ApiResponse<>(true, SuccessStatus._OK.getCode() , SuccessStatus._OK.getMessage(), result); + } + + public static ApiResponse of(BaseCode code, T result){ + return new ApiResponse<>(true, code.getReasonHttpStatus().getCode() , code.getReasonHttpStatus().getMessage(), result); + } + + + // 실패한 경우 응답 생성 + public static ApiResponse onFailure(String code, String message, T data){ + return new ApiResponse<>(false, code, message, data); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/apiPayload/BaseCode.java b/src/main/java/com/example/apiPayload/BaseCode.java new file mode 100644 index 0000000..e0ba3c7 --- /dev/null +++ b/src/main/java/com/example/apiPayload/BaseCode.java @@ -0,0 +1,10 @@ +package com.example.apiPayload; + +import java.awt.desktop.UserSessionEvent; + +public interface BaseCode { + + ReasonDTO getReason(); + + ReasonDTO getReasonHttpStatus(); +} \ No newline at end of file diff --git a/src/main/java/com/example/apiPayload/BaseErrorCode.java b/src/main/java/com/example/apiPayload/BaseErrorCode.java new file mode 100644 index 0000000..10a9726 --- /dev/null +++ b/src/main/java/com/example/apiPayload/BaseErrorCode.java @@ -0,0 +1,7 @@ +package com.example.apiPayload; + +public interface BaseErrorCode { + ErrorReasonDTO getReason(); + + ErrorReasonDTO getReasonHttpStatus(); +} diff --git a/src/main/java/com/example/apiPayload/ErrorReasonDTO.java b/src/main/java/com/example/apiPayload/ErrorReasonDTO.java new file mode 100644 index 0000000..b9dd976 --- /dev/null +++ b/src/main/java/com/example/apiPayload/ErrorReasonDTO.java @@ -0,0 +1,18 @@ +package com.example.apiPayload; + +import lombok.Builder; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@Builder +public class ErrorReasonDTO { + + private HttpStatus httpStatus; + + private final boolean isSuccess; + private final String code; + private final String message; + + public boolean getIsSuccess(){return isSuccess;} +} \ No newline at end of file diff --git a/src/main/java/com/example/apiPayload/ReasonDTO.java b/src/main/java/com/example/apiPayload/ReasonDTO.java new file mode 100644 index 0000000..eef5960 --- /dev/null +++ b/src/main/java/com/example/apiPayload/ReasonDTO.java @@ -0,0 +1,18 @@ +package com.example.apiPayload; + +import lombok.Builder; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@Builder +public class ReasonDTO { + + private HttpStatus httpStatus; + + private final boolean isSuccess; + private final String code; + private final String message; + + public boolean getIsSuccess(){return isSuccess;} +} \ No newline at end of file diff --git a/src/main/java/com/example/apiPayload/code/status/ErrorStatus.java b/src/main/java/com/example/apiPayload/code/status/ErrorStatus.java new file mode 100644 index 0000000..c90d826 --- /dev/null +++ b/src/main/java/com/example/apiPayload/code/status/ErrorStatus.java @@ -0,0 +1,52 @@ +package com.example.apiPayload.code.status; + +import com.example.apiPayload.BaseErrorCode; +import com.example.apiPayload.ErrorReasonDTO; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum ErrorStatus implements BaseErrorCode { + + // 가장 일반적인 응답 + _INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "COMMON500", "서버 에러, 관리자에게 문의 바랍니다."), + _BAD_REQUEST(HttpStatus.BAD_REQUEST,"COMMON400","잘못된 요청입니다."), + _UNAUTHORIZED(HttpStatus.UNAUTHORIZED,"COMMON401","인증이 필요합니다."), + _FORBIDDEN(HttpStatus.FORBIDDEN, "COMMON403", "금지된 요청입니다."), + + // For test + TEMP_EXCEPTION(HttpStatus.BAD_REQUEST, "TEMP4001", "이거는 테스트"), + + // Member Error + MEMBER_NOT_FOUND(HttpStatus.BAD_REQUEST, "MEMBER4001", "사용자가 없습니다."), + NICKNAME_NOT_EXIST(HttpStatus.BAD_REQUEST, "MEMBER4002", "닉네임은 필수 입니다."), + + // Article Error + ARTICLE_NOT_FOUND(HttpStatus.NOT_FOUND, "ARTICLE4001", "게시글이 없습니다."); + + private final HttpStatus httpStatus; + private final String code; + private final String message; + + @Override + public ErrorReasonDTO getReason() { + return ErrorReasonDTO.builder() + .message(message) + .code(code) + .isSuccess(false) + .build(); + } + + @Override + public ErrorReasonDTO getReasonHttpStatus() { + return ErrorReasonDTO.builder() + .message(message) + .code(code) + .isSuccess(false) + .httpStatus(httpStatus) + .build() + ; + } +} \ No newline at end of file diff --git a/src/main/java/com/example/apiPayload/code/status/SuccessStatus.java b/src/main/java/com/example/apiPayload/code/status/SuccessStatus.java new file mode 100644 index 0000000..22ed1d5 --- /dev/null +++ b/src/main/java/com/example/apiPayload/code/status/SuccessStatus.java @@ -0,0 +1,39 @@ +package com.example.apiPayload.code.status; + +import com.example.apiPayload.BaseCode; +import com.example.apiPayload.ReasonDTO; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum SuccessStatus implements BaseCode { + + // 일반적인 응답 + _OK(HttpStatus.OK, "COMMON200", "성공입니다."); + + private final HttpStatus httpStatus; + private final String code; + private final String message; + + @Override + public ReasonDTO getReason() { + return ReasonDTO.builder() + .message(message) + .code(code) + .isSuccess(true) + .build(); + } + + @Override + public ReasonDTO getReasonHttpStatus() { + return ReasonDTO.builder() + .message(message) + .code(code) + .isSuccess(true) + .httpStatus(httpStatus) + .build() + ; + } +} diff --git a/src/main/java/com/example/apiPayload/exception/ExceptionAdvice.java b/src/main/java/com/example/apiPayload/exception/ExceptionAdvice.java new file mode 100644 index 0000000..9c33f74 --- /dev/null +++ b/src/main/java/com/example/apiPayload/exception/ExceptionAdvice.java @@ -0,0 +1,119 @@ +package com.example.apiPayload.exception; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.ConstraintViolationException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.HttpStatusCode; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.context.request.ServletWebRequest; +import org.springframework.web.context.request.WebRequest; +import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; +import com.example.apiPayload.ApiResponse; +import com.example.apiPayload.ErrorReasonDTO; +import com.example.apiPayload.code.status.ErrorStatus; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Optional; + +@Slf4j +@RestControllerAdvice(annotations = {RestController.class}) +public class ExceptionAdvice extends ResponseEntityExceptionHandler { + + + @ExceptionHandler + public ResponseEntity validation(ConstraintViolationException e, WebRequest request) { + String errorMessage = e.getConstraintViolations().stream() + .map(constraintViolation -> constraintViolation.getMessage()) + .findFirst() + .orElseThrow(() -> new RuntimeException("ConstraintViolationException 추출 도중 에러 발생")); + + return handleExceptionInternalConstraint(e, ErrorStatus.valueOf(errorMessage), HttpHeaders.EMPTY,request); + } + + @Override + public ResponseEntity handleMethodArgumentNotValid(MethodArgumentNotValidException e, HttpHeaders headers, HttpStatusCode status, WebRequest request) { + + Map errors = new LinkedHashMap<>(); + + e.getBindingResult().getFieldErrors().stream() + .forEach(fieldError -> { + String fieldName = fieldError.getField(); + String errorMessage = Optional.ofNullable(fieldError.getDefaultMessage()).orElse(""); + errors.merge(fieldName, errorMessage, (existingErrorMessage, newErrorMessage) -> existingErrorMessage + ", " + newErrorMessage); + }); + + return handleExceptionInternalArgs(e,HttpHeaders.EMPTY,ErrorStatus.valueOf("_BAD_REQUEST"),request,errors); + } + + @ExceptionHandler + public ResponseEntity exception(Exception e, WebRequest request) { + e.printStackTrace(); + + return handleExceptionInternalFalse(e, ErrorStatus._INTERNAL_SERVER_ERROR, HttpHeaders.EMPTY, ErrorStatus._INTERNAL_SERVER_ERROR.getHttpStatus(),request, e.getMessage()); + } + + @ExceptionHandler(value = GeneralException.class) + public ResponseEntity onThrowException(GeneralException generalException, HttpServletRequest request) { + ErrorReasonDTO errorReasonHttpStatus = generalException.getErrorReasonHttpStatus(); + return handleExceptionInternal(generalException,errorReasonHttpStatus,null,request); + } + + private ResponseEntity handleExceptionInternal(Exception e, ErrorReasonDTO reason, + HttpHeaders headers, HttpServletRequest request) { + + ApiResponse body = ApiResponse.onFailure(reason.getCode(),reason.getMessage(),null); +// e.printStackTrace(); + + WebRequest webRequest = new ServletWebRequest(request); + return super.handleExceptionInternal( + e, + body, + headers, + reason.getHttpStatus(), + webRequest + ); + } + + private ResponseEntity handleExceptionInternalFalse(Exception e, ErrorStatus errorCommonStatus, + HttpHeaders headers, HttpStatus status, WebRequest request, String errorPoint) { + ApiResponse body = ApiResponse.onFailure(errorCommonStatus.getCode(),errorCommonStatus.getMessage(),errorPoint); + return super.handleExceptionInternal( + e, + body, + headers, + status, + request + ); + } + + private ResponseEntity handleExceptionInternalArgs(Exception e, HttpHeaders headers, ErrorStatus errorCommonStatus, + WebRequest request, Map errorArgs) { + ApiResponse body = ApiResponse.onFailure(errorCommonStatus.getCode(),errorCommonStatus.getMessage(),errorArgs); + return super.handleExceptionInternal( + e, + body, + headers, + errorCommonStatus.getHttpStatus(), + request + ); + } + + private ResponseEntity handleExceptionInternalConstraint(Exception e, ErrorStatus errorCommonStatus, + HttpHeaders headers, WebRequest request) { + ApiResponse body = ApiResponse.onFailure(errorCommonStatus.getCode(), errorCommonStatus.getMessage(), null); + return super.handleExceptionInternal( + e, + body, + headers, + errorCommonStatus.getHttpStatus(), + request + ); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/apiPayload/exception/GeneralException.java b/src/main/java/com/example/apiPayload/exception/GeneralException.java new file mode 100644 index 0000000..ea4fbfa --- /dev/null +++ b/src/main/java/com/example/apiPayload/exception/GeneralException.java @@ -0,0 +1,21 @@ +package com.example.apiPayload.exception; + +import com.example.apiPayload.BaseErrorCode; +import com.example.apiPayload.ErrorReasonDTO; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class GeneralException extends RuntimeException { + + private BaseErrorCode code; + + public ErrorReasonDTO getErrorReason() { + return this.code.getReason(); + } + + public ErrorReasonDTO getErrorReasonHttpStatus(){ + return this.code.getReasonHttpStatus(); + } +} diff --git a/src/main/java/com/example/apiPayload/exception/handler/TempHandler.java b/src/main/java/com/example/apiPayload/exception/handler/TempHandler.java new file mode 100644 index 0000000..c976c01 --- /dev/null +++ b/src/main/java/com/example/apiPayload/exception/handler/TempHandler.java @@ -0,0 +1,11 @@ +package com.example.apiPayload.exception.handler; + +import com.example.apiPayload.BaseErrorCode; +import com.example.apiPayload.exception.GeneralException; + +public class TempHandler extends GeneralException { + + public TempHandler(BaseErrorCode errorCode) { + super(errorCode); + } +} diff --git a/src/main/java/com/example/config/QueryDSLConfig.java b/src/main/java/com/example/config/QueryDSLConfig.java index 01074a1..7cfa06f 100644 --- a/src/main/java/com/example/config/QueryDSLConfig.java +++ b/src/main/java/com/example/config/QueryDSLConfig.java @@ -1,19 +1,18 @@ package com.example.config; import com.querydsl.jpa.impl.JPAQueryFactory; -import jakarta.persistence.EntityManager; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import jakarta.persistence.EntityManager; @Configuration @RequiredArgsConstructor public class QueryDSLConfig { - private final EntityManager entityManager; @Bean public JPAQueryFactory jpaQueryFactory(){ return new JPAQueryFactory(entityManager); } -} +} \ No newline at end of file diff --git a/src/main/java/com/example/converter/TempConverter.java b/src/main/java/com/example/converter/TempConverter.java new file mode 100644 index 0000000..3ef9d08 --- /dev/null +++ b/src/main/java/com/example/converter/TempConverter.java @@ -0,0 +1,17 @@ +package com.example.converter; + +import com.example.web.dto.TempResponse; + +public class TempConverter { + public static TempResponse.TempTestDTO toTempTestDTO(){ + return TempResponse.TempTestDTO.builder() + .testString("This is Test!") + .build(); + } + + public static TempResponse.TempExceptionDTO toTempExceptionDTO(Integer flag){ + return TempResponse.TempExceptionDTO.builder() + .flag(flag) + .build(); + } +} diff --git a/src/main/java/com/example/domain/Review.java b/src/main/java/com/example/domain/Review.java index 1457a08..ed1fdce 100644 --- a/src/main/java/com/example/domain/Review.java +++ b/src/main/java/com/example/domain/Review.java @@ -27,4 +27,8 @@ public class Review extends BaseEntity { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; + + @ManyToOne + @JoinColumn(name = "store_id") + private Store store; } \ No newline at end of file diff --git a/src/main/java/com/example/service/TempService/TempCommandService.java b/src/main/java/com/example/service/TempService/TempCommandService.java new file mode 100644 index 0000000..9641aa4 --- /dev/null +++ b/src/main/java/com/example/service/TempService/TempCommandService.java @@ -0,0 +1,4 @@ +package com.example.service.TempService; + +public interface TempCommandService { +} diff --git a/src/main/java/com/example/service/TempService/TempCommandServiceImpl.java b/src/main/java/com/example/service/TempService/TempCommandServiceImpl.java new file mode 100644 index 0000000..e6beadf --- /dev/null +++ b/src/main/java/com/example/service/TempService/TempCommandServiceImpl.java @@ -0,0 +1,10 @@ +package com.example.service.TempService; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class TempCommandServiceImpl implements TempCommandService{ + +} diff --git a/src/main/java/com/example/service/TempService/TempQueryService.java b/src/main/java/com/example/service/TempService/TempQueryService.java new file mode 100644 index 0000000..3b14128 --- /dev/null +++ b/src/main/java/com/example/service/TempService/TempQueryService.java @@ -0,0 +1,5 @@ +package com.example.service.TempService; + +public interface TempQueryService { + void CheckFlag(Integer flag); +} diff --git a/src/main/java/com/example/service/TempService/TempQueryServiceImpl.java b/src/main/java/com/example/service/TempService/TempQueryServiceImpl.java new file mode 100644 index 0000000..e4eba73 --- /dev/null +++ b/src/main/java/com/example/service/TempService/TempQueryServiceImpl.java @@ -0,0 +1,17 @@ +package com.example.service.TempService; + +import com.example.apiPayload.code.status.ErrorStatus; +import com.example.apiPayload.exception.handler.TempHandler; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class TempQueryServiceImpl implements TempQueryService{ + + @Override + public void CheckFlag(Integer flag) { + if (flag == 1) + throw new TempHandler(ErrorStatus.TEMP_EXCEPTION); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/web/controller/TempRestController.java b/src/main/java/com/example/web/controller/TempRestController.java new file mode 100644 index 0000000..35a437d --- /dev/null +++ b/src/main/java/com/example/web/controller/TempRestController.java @@ -0,0 +1,31 @@ +package com.example.web.controller; + +import com.example.apiPayload.ApiResponse; +import com.example.converter.TempConverter; +import com.example.service.TempService.TempQueryService; +import com.example.web.dto.TempResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/temp") +@RequiredArgsConstructor +public class TempRestController { + + private final TempQueryService tempQueryService; + + @GetMapping("/test") + public ApiResponse testAPI(){ + + return ApiResponse.onSuccess(TempConverter.toTempTestDTO()); + } + + @GetMapping("/exception") + public ApiResponse exceptionAPI(@RequestParam Integer flag){ + tempQueryService.CheckFlag(flag); + return ApiResponse.onSuccess(TempConverter.toTempExceptionDTO(flag)); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/web/dto/TempRequest.java b/src/main/java/com/example/web/dto/TempRequest.java new file mode 100644 index 0000000..26af834 --- /dev/null +++ b/src/main/java/com/example/web/dto/TempRequest.java @@ -0,0 +1,4 @@ +package com.example.web.dto; + +public class TempRequest { +} diff --git a/src/main/java/com/example/web/dto/TempResponse.java b/src/main/java/com/example/web/dto/TempResponse.java new file mode 100644 index 0000000..3cb06dc --- /dev/null +++ b/src/main/java/com/example/web/dto/TempResponse.java @@ -0,0 +1,25 @@ +package com.example.web.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +public class TempResponse { + + @Builder + @Getter + @NoArgsConstructor + @AllArgsConstructor + public static class TempTestDTO{ + String testString; + } + + @Builder + @Getter + @NoArgsConstructor + @AllArgsConstructor + public static class TempExceptionDTO{ + Integer flag; + } +} From 83bc2cb850f9888114a1527b65a217edd8a95ebe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=98=88=EC=A7=84=20=EB=B0=95?= Date: Mon, 19 May 2025 23:48:20 +0900 Subject: [PATCH 4/7] =?UTF-8?q?8=EC=A3=BC=EC=B0=A8=20=EC=8B=A4=EC=8A=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitattributes | 3 - .gitignore | 37 --- .gradle/8.10/checksums/checksums.lock | 0 .../8.10/dependencies-accessors/gc.properties | 0 .../executionHistory/executionHistory.lock | 0 .gradle/8.10/fileChanges/last-build.bin | 0 .gradle/8.10/fileHashes/fileHashes.lock | 0 .gradle/8.10/gc.properties | 0 .gradle/8.13/checksums/checksums.lock | 0 .../executionHistory/executionHistory.bin | 0 .../executionHistory/executionHistory.lock | 0 .gradle/8.13/fileChanges/last-build.bin | 0 .gradle/8.13/fileHashes/fileHashes.bin | 0 .gradle/8.13/fileHashes/fileHashes.lock | 0 .../8.13/fileHashes/resourceHashesCache.bin | 0 .gradle/8.13/gc.properties | 0 .../buildOutputCleanup.lock | 0 .gradle/buildOutputCleanup/cache.properties | 0 .gradle/buildOutputCleanup/outputFiles.bin | 0 .gradle/file-system.probe | 0 .gradle/vcs-1/gc.properties | 0 .idea/.gitignore | 8 + .idea/compiler.xml | 25 ++ .idea/dataSources.xml | 31 +++ .idea/gradle.xml | 18 ++ .idea/misc.xml | 8 + .idea/modules.xml | 8 + .idea/modules/spring.main.iml | 20 ++ .idea/vcs.xml | 6 + HELP.md | 25 ++ build.gradle | 3 +- .../com/example/domain/QFoodCategory.java | 47 ++++ .../java/main/com/example/domain/QMember.java | 72 +++++ .../main/com/example/domain/QMission.java | 70 +++++ .../java/main/com/example/domain/QRegion.java | 47 ++++ .../java/main/com/example/domain/QReview.java | 66 +++++ .../java/main/com/example/domain/QStore.java | 69 +++++ .../java/main/com/example/domain/QTerms.java | 54 ++++ .../example/domain/common/QBaseEntity.java | 39 +++ .../example/domain/mapping/QMemberAgree.java | 62 +++++ .../domain/mapping/QMemberMission.java | 64 +++++ .../example/domain/mapping/QMemberPrefer.java | 62 +++++ build/reports/problems/problems-report.html | 0 build/resources/main/application.yml | 0 build/resources/main/data.sql | 0 .../compileJava/previous-compilation-data.bin | 0 gradlew | 251 ------------------ gradlew.bat | 94 ------- .../example/apiPayload/MemberRequestDTO.java | 32 +++ .../example/apiPayload/MemberResponseDTO.java | 19 ++ .../apiPayload/code/status/ErrorStatus.java | 6 +- .../handler/FoodCategoryHandler.java | 11 + .../com/example/config/SwaggerConfig.java | 40 +++ .../example/converter/MemberConverter.java | 44 +++ .../converter/MemberPreferConverter.java | 21 ++ src/main/java/com/example/domain/Member.java | 8 +- .../java/com/example/domain/enums/Gender.java | 2 +- .../example/domain/mapping/MemberPrefer.java | 11 + .../FoodCategoryRepository.java | 7 + .../MemberRepository/MemberRepository.java | 7 + .../MemberService/MemberCommandService.java | 9 + .../MemberCommandServiceImpl.java | 44 +++ .../MemberService/MemberQureyService.java | 4 + .../MemberService/MemberQureyServiceImpl.java | 4 + .../annotation/ExistCategories.java | 18 ++ .../validator/CategoriesExistValidator.java | 37 +++ .../web/controller/MemberRestController.java | 28 ++ src/main/resources/data.sql | 24 -- 68 files changed, 1152 insertions(+), 413 deletions(-) create mode 100644 .gradle/8.10/checksums/checksums.lock create mode 100644 .gradle/8.10/dependencies-accessors/gc.properties create mode 100644 .gradle/8.10/executionHistory/executionHistory.lock create mode 100644 .gradle/8.10/fileChanges/last-build.bin create mode 100644 .gradle/8.10/fileHashes/fileHashes.lock create mode 100644 .gradle/8.10/gc.properties create mode 100644 .gradle/8.13/checksums/checksums.lock create mode 100644 .gradle/8.13/executionHistory/executionHistory.bin create mode 100644 .gradle/8.13/executionHistory/executionHistory.lock create mode 100644 .gradle/8.13/fileChanges/last-build.bin create mode 100644 .gradle/8.13/fileHashes/fileHashes.bin create mode 100644 .gradle/8.13/fileHashes/fileHashes.lock create mode 100644 .gradle/8.13/fileHashes/resourceHashesCache.bin create mode 100644 .gradle/8.13/gc.properties create mode 100644 .gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 .gradle/buildOutputCleanup/cache.properties create mode 100644 .gradle/buildOutputCleanup/outputFiles.bin create mode 100644 .gradle/file-system.probe create mode 100644 .gradle/vcs-1/gc.properties create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/dataSources.xml create mode 100644 .idea/gradle.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/modules/spring.main.iml create mode 100644 .idea/vcs.xml create mode 100644 HELP.md create mode 100644 build/generated/sources/annotationProcessor/java/main/com/example/domain/QFoodCategory.java create mode 100644 build/generated/sources/annotationProcessor/java/main/com/example/domain/QMember.java create mode 100644 build/generated/sources/annotationProcessor/java/main/com/example/domain/QMission.java create mode 100644 build/generated/sources/annotationProcessor/java/main/com/example/domain/QRegion.java create mode 100644 build/generated/sources/annotationProcessor/java/main/com/example/domain/QReview.java create mode 100644 build/generated/sources/annotationProcessor/java/main/com/example/domain/QStore.java create mode 100644 build/generated/sources/annotationProcessor/java/main/com/example/domain/QTerms.java create mode 100644 build/generated/sources/annotationProcessor/java/main/com/example/domain/common/QBaseEntity.java create mode 100644 build/generated/sources/annotationProcessor/java/main/com/example/domain/mapping/QMemberAgree.java create mode 100644 build/generated/sources/annotationProcessor/java/main/com/example/domain/mapping/QMemberMission.java create mode 100644 build/generated/sources/annotationProcessor/java/main/com/example/domain/mapping/QMemberPrefer.java create mode 100644 build/reports/problems/problems-report.html create mode 100644 build/resources/main/application.yml create mode 100644 build/resources/main/data.sql create mode 100644 build/tmp/compileJava/previous-compilation-data.bin create mode 100644 src/main/java/com/example/apiPayload/MemberRequestDTO.java create mode 100644 src/main/java/com/example/apiPayload/MemberResponseDTO.java create mode 100644 src/main/java/com/example/apiPayload/exception/handler/FoodCategoryHandler.java create mode 100644 src/main/java/com/example/config/SwaggerConfig.java create mode 100644 src/main/java/com/example/converter/MemberConverter.java create mode 100644 src/main/java/com/example/converter/MemberPreferConverter.java create mode 100644 src/main/java/com/example/repository/FoodCategoryRepository/FoodCategoryRepository.java create mode 100644 src/main/java/com/example/repository/MemberRepository/MemberRepository.java create mode 100644 src/main/java/com/example/service/MemberService/MemberCommandService.java create mode 100644 src/main/java/com/example/service/MemberService/MemberCommandServiceImpl.java create mode 100644 src/main/java/com/example/service/MemberService/MemberQureyService.java create mode 100644 src/main/java/com/example/service/MemberService/MemberQureyServiceImpl.java create mode 100644 src/main/java/com/example/validation/annotation/ExistCategories.java create mode 100644 src/main/java/com/example/validation/validator/CategoriesExistValidator.java create mode 100644 src/main/java/com/example/web/controller/MemberRestController.java diff --git a/.gitattributes b/.gitattributes index 8af972c..e69de29 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +0,0 @@ -/gradlew text eol=lf -*.bat text eol=crlf -*.jar binary diff --git a/.gitignore b/.gitignore index c2065bc..e69de29 100644 --- a/.gitignore +++ b/.gitignore @@ -1,37 +0,0 @@ -HELP.md -.gradle -build/ -!gradle/wrapper/gradle-wrapper.jar -!**/src/main/**/build/ -!**/src/test/**/build/ - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache -bin/ -!**/src/main/**/bin/ -!**/src/test/**/bin/ - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr -out/ -!**/src/main/**/out/ -!**/src/test/**/out/ - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ - -### VS Code ### -.vscode/ diff --git a/.gradle/8.10/checksums/checksums.lock b/.gradle/8.10/checksums/checksums.lock new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/8.10/dependencies-accessors/gc.properties b/.gradle/8.10/dependencies-accessors/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/8.10/executionHistory/executionHistory.lock b/.gradle/8.10/executionHistory/executionHistory.lock new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/8.10/fileChanges/last-build.bin b/.gradle/8.10/fileChanges/last-build.bin new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/8.10/fileHashes/fileHashes.lock b/.gradle/8.10/fileHashes/fileHashes.lock new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/8.10/gc.properties b/.gradle/8.10/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/8.13/checksums/checksums.lock b/.gradle/8.13/checksums/checksums.lock new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/8.13/executionHistory/executionHistory.bin b/.gradle/8.13/executionHistory/executionHistory.bin new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/8.13/executionHistory/executionHistory.lock b/.gradle/8.13/executionHistory/executionHistory.lock new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/8.13/fileChanges/last-build.bin b/.gradle/8.13/fileChanges/last-build.bin new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/8.13/fileHashes/fileHashes.bin b/.gradle/8.13/fileHashes/fileHashes.bin new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/8.13/fileHashes/fileHashes.lock b/.gradle/8.13/fileHashes/fileHashes.lock new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/8.13/fileHashes/resourceHashesCache.bin b/.gradle/8.13/fileHashes/resourceHashesCache.bin new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/8.13/gc.properties b/.gradle/8.13/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/vcs-1/gc.properties b/.gradle/vcs-1/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..c3f502a --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# 디폴트 무시된 파일 +/shelf/ +/workspace.xml +# 에디터 기반 HTTP 클라이언트 요청 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..b453fa5 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml new file mode 100644 index 0000000..bc16866 --- /dev/null +++ b/.idea/dataSources.xml @@ -0,0 +1,31 @@ + + + + + mysql.8 + true + com.mysql.cj.jdbc.Driver + jdbc:mysql://localhost:3306 + + + + + + $ProjectFileDir$ + + + mysql.8 + true + true + $PROJECT_DIR$/src/main/resources/application.yml + com.mysql.cj.jdbc.Driver + jdbc:mysql://localhost:3306/study + + + + + + $ProjectFileDir$ + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..4568975 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,18 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..c049206 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..69a5b1e --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/modules/spring.main.iml b/.idea/modules/spring.main.iml new file mode 100644 index 0000000..ded96ef --- /dev/null +++ b/.idea/modules/spring.main.iml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/HELP.md b/HELP.md new file mode 100644 index 0000000..ec679ff --- /dev/null +++ b/HELP.md @@ -0,0 +1,25 @@ +# Getting Started + +### Reference Documentation +For further reference, please consider the following sections: + +* [Official Gradle documentation](https://docs.gradle.org) +* [Spring Boot Gradle Plugin Reference Guide](https://docs.spring.io/spring-boot/3.3.11/gradle-plugin) +* [Create an OCI image](https://docs.spring.io/spring-boot/3.3.11/gradle-plugin/packaging-oci-image.html) +* [Spring Web](https://docs.spring.io/spring-boot/3.3.11/reference/web/servlet.html) +* [Spring Data JPA](https://docs.spring.io/spring-boot/3.3.11/reference/data/sql.html#data.sql.jpa-and-spring-data) + +### Guides +The following guides illustrate how to use some features concretely: + +* [Building a RESTful Web Service](https://spring.io/guides/gs/rest-service/) +* [Serving Web Content with Spring MVC](https://spring.io/guides/gs/serving-web-content/) +* [Building REST services with Spring](https://spring.io/guides/tutorials/rest/) +* [Accessing data with MySQL](https://spring.io/guides/gs/accessing-data-mysql/) +* [Accessing Data with JPA](https://spring.io/guides/gs/accessing-data-jpa/) + +### Additional Links +These additional references should also help you: + +* [Gradle Build Scans – insights for your project's build](https://scans.gradle.com#gradle) + diff --git a/build.gradle b/build.gradle index 3ba1fcb..65c91ad 100644 --- a/build.gradle +++ b/build.gradle @@ -30,7 +30,8 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.hibernate.validator:hibernate-validator:8.0.1.Final' // 명시적 추가 - + implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.3.0' + implementation 'org.springframework.boot:spring-boot-starter-validation' // Lombok compileOnly 'org.projectlombok:lombok' diff --git a/build/generated/sources/annotationProcessor/java/main/com/example/domain/QFoodCategory.java b/build/generated/sources/annotationProcessor/java/main/com/example/domain/QFoodCategory.java new file mode 100644 index 0000000..2559586 --- /dev/null +++ b/build/generated/sources/annotationProcessor/java/main/com/example/domain/QFoodCategory.java @@ -0,0 +1,47 @@ +package com.example.domain; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; + + +/** + * QFoodCategory is a Querydsl query type for FoodCategory + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QFoodCategory extends EntityPathBase { + + private static final long serialVersionUID = -1774211307L; + + public static final QFoodCategory foodCategory = new QFoodCategory("foodCategory"); + + public final com.example.domain.common.QBaseEntity _super = new com.example.domain.common.QBaseEntity(this); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final NumberPath id = createNumber("id", Long.class); + + public final StringPath name = createString("name"); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QFoodCategory(String variable) { + super(FoodCategory.class, forVariable(variable)); + } + + public QFoodCategory(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QFoodCategory(PathMetadata metadata) { + super(FoodCategory.class, metadata); + } + +} + diff --git a/build/generated/sources/annotationProcessor/java/main/com/example/domain/QMember.java b/build/generated/sources/annotationProcessor/java/main/com/example/domain/QMember.java new file mode 100644 index 0000000..2827182 --- /dev/null +++ b/build/generated/sources/annotationProcessor/java/main/com/example/domain/QMember.java @@ -0,0 +1,72 @@ +package com.example.domain; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QMember is a Querydsl query type for Member + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QMember extends EntityPathBase { + + private static final long serialVersionUID = -1016450829L; + + public static final QMember member = new QMember("member1"); + + public final com.example.domain.common.QBaseEntity _super = new com.example.domain.common.QBaseEntity(this); + + public final StringPath address = createString("address"); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final StringPath email = createString("email"); + + public final EnumPath gender = createEnum("gender", com.example.domain.enums.Gender.class); + + public final NumberPath id = createNumber("id", Long.class); + + public final DatePath inactiveDate = createDate("inactiveDate", java.time.LocalDate.class); + + public final ListPath memberAgreeList = this.createList("memberAgreeList", com.example.domain.mapping.MemberAgree.class, com.example.domain.mapping.QMemberAgree.class, PathInits.DIRECT2); + + public final ListPath memberMissionList = this.createList("memberMissionList", com.example.domain.mapping.MemberMission.class, com.example.domain.mapping.QMemberMission.class, PathInits.DIRECT2); + + public final ListPath memberPreferList = this.createList("memberPreferList", com.example.domain.mapping.MemberPrefer.class, com.example.domain.mapping.QMemberPrefer.class, PathInits.DIRECT2); + + public final StringPath name = createString("name"); + + public final NumberPath point = createNumber("point", Integer.class); + + public final ListPath reviewList = this.createList("reviewList", Review.class, QReview.class, PathInits.DIRECT2); + + public final EnumPath socialType = createEnum("socialType", com.example.domain.enums.SocialType.class); + + public final StringPath specAddress = createString("specAddress"); + + public final EnumPath status = createEnum("status", com.example.domain.enums.MemberStatus.class); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QMember(String variable) { + super(Member.class, forVariable(variable)); + } + + public QMember(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QMember(PathMetadata metadata) { + super(Member.class, metadata); + } + +} + diff --git a/build/generated/sources/annotationProcessor/java/main/com/example/domain/QMission.java b/build/generated/sources/annotationProcessor/java/main/com/example/domain/QMission.java new file mode 100644 index 0000000..b5abb4f --- /dev/null +++ b/build/generated/sources/annotationProcessor/java/main/com/example/domain/QMission.java @@ -0,0 +1,70 @@ +package com.example.domain; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QMission is a Querydsl query type for Mission + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QMission extends EntityPathBase { + + private static final long serialVersionUID = -1324636589L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QMission mission = new QMission("mission"); + + public final com.example.domain.common.QBaseEntity _super = new com.example.domain.common.QBaseEntity(this); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final DatePath deadline = createDate("deadline", java.time.LocalDate.class); + + public final NumberPath id = createNumber("id", Long.class); + + public final QMember member; + + public final ListPath memberMissionList = this.createList("memberMissionList", com.example.domain.mapping.MemberMission.class, com.example.domain.mapping.QMemberMission.class, PathInits.DIRECT2); + + public final StringPath missionSpec = createString("missionSpec"); + + public final NumberPath reward = createNumber("reward", Integer.class); + + public final QStore store; + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QMission(String variable) { + this(Mission.class, forVariable(variable), INITS); + } + + public QMission(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QMission(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QMission(PathMetadata metadata, PathInits inits) { + this(Mission.class, metadata, inits); + } + + public QMission(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.member = inits.isInitialized("member") ? new QMember(forProperty("member")) : null; + this.store = inits.isInitialized("store") ? new QStore(forProperty("store"), inits.get("store")) : null; + } + +} + diff --git a/build/generated/sources/annotationProcessor/java/main/com/example/domain/QRegion.java b/build/generated/sources/annotationProcessor/java/main/com/example/domain/QRegion.java new file mode 100644 index 0000000..7e64716 --- /dev/null +++ b/build/generated/sources/annotationProcessor/java/main/com/example/domain/QRegion.java @@ -0,0 +1,47 @@ +package com.example.domain; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; + + +/** + * QRegion is a Querydsl query type for Region + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QRegion extends EntityPathBase { + + private static final long serialVersionUID = -873476787L; + + public static final QRegion region = new QRegion("region"); + + public final com.example.domain.common.QBaseEntity _super = new com.example.domain.common.QBaseEntity(this); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final NumberPath id = createNumber("id", Long.class); + + public final StringPath name = createString("name"); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QRegion(String variable) { + super(Region.class, forVariable(variable)); + } + + public QRegion(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QRegion(PathMetadata metadata) { + super(Region.class, metadata); + } + +} + diff --git a/build/generated/sources/annotationProcessor/java/main/com/example/domain/QReview.java b/build/generated/sources/annotationProcessor/java/main/com/example/domain/QReview.java new file mode 100644 index 0000000..a5ab4aa --- /dev/null +++ b/build/generated/sources/annotationProcessor/java/main/com/example/domain/QReview.java @@ -0,0 +1,66 @@ +package com.example.domain; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QReview is a Querydsl query type for Review + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QReview extends EntityPathBase { + + private static final long serialVersionUID = -873030223L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QReview review = new QReview("review"); + + public final com.example.domain.common.QBaseEntity _super = new com.example.domain.common.QBaseEntity(this); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final NumberPath id = createNumber("id", Long.class); + + public final QMember member; + + public final NumberPath score = createNumber("score", Float.class); + + public final QStore store; + + public final StringPath title = createString("title"); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QReview(String variable) { + this(Review.class, forVariable(variable), INITS); + } + + public QReview(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QReview(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QReview(PathMetadata metadata, PathInits inits) { + this(Review.class, metadata, inits); + } + + public QReview(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.member = inits.isInitialized("member") ? new QMember(forProperty("member")) : null; + this.store = inits.isInitialized("store") ? new QStore(forProperty("store"), inits.get("store")) : null; + } + +} + diff --git a/build/generated/sources/annotationProcessor/java/main/com/example/domain/QStore.java b/build/generated/sources/annotationProcessor/java/main/com/example/domain/QStore.java new file mode 100644 index 0000000..f43706e --- /dev/null +++ b/build/generated/sources/annotationProcessor/java/main/com/example/domain/QStore.java @@ -0,0 +1,69 @@ +package com.example.domain; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QStore is a Querydsl query type for Store + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QStore extends EntityPathBase { + + private static final long serialVersionUID = -996629656L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QStore store = new QStore("store"); + + public final com.example.domain.common.QBaseEntity _super = new com.example.domain.common.QBaseEntity(this); + + public final StringPath address = createString("address"); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final NumberPath id = createNumber("id", Long.class); + + public final ListPath missionList = this.createList("missionList", Mission.class, QMission.class, PathInits.DIRECT2); + + public final StringPath name = createString("name"); + + public final QRegion region; + + public final ListPath reviewList = this.createList("reviewList", Review.class, QReview.class, PathInits.DIRECT2); + + public final NumberPath score = createNumber("score", Float.class); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QStore(String variable) { + this(Store.class, forVariable(variable), INITS); + } + + public QStore(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QStore(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QStore(PathMetadata metadata, PathInits inits) { + this(Store.class, metadata, inits); + } + + public QStore(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.region = inits.isInitialized("region") ? new QRegion(forProperty("region")) : null; + } + +} + diff --git a/build/generated/sources/annotationProcessor/java/main/com/example/domain/QTerms.java b/build/generated/sources/annotationProcessor/java/main/com/example/domain/QTerms.java new file mode 100644 index 0000000..92a430f --- /dev/null +++ b/build/generated/sources/annotationProcessor/java/main/com/example/domain/QTerms.java @@ -0,0 +1,54 @@ +package com.example.domain; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QTerms is a Querydsl query type for Terms + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QTerms extends EntityPathBase { + + private static final long serialVersionUID = -996150258L; + + public static final QTerms terms = new QTerms("terms"); + + public final com.example.domain.common.QBaseEntity _super = new com.example.domain.common.QBaseEntity(this); + + public final StringPath body = createString("body"); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final NumberPath id = createNumber("id", Long.class); + + public final ListPath memberAgreeList = this.createList("memberAgreeList", com.example.domain.mapping.MemberAgree.class, com.example.domain.mapping.QMemberAgree.class, PathInits.DIRECT2); + + public final BooleanPath optional = createBoolean("optional"); + + public final StringPath title = createString("title"); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QTerms(String variable) { + super(Terms.class, forVariable(variable)); + } + + public QTerms(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QTerms(PathMetadata metadata) { + super(Terms.class, metadata); + } + +} + diff --git a/build/generated/sources/annotationProcessor/java/main/com/example/domain/common/QBaseEntity.java b/build/generated/sources/annotationProcessor/java/main/com/example/domain/common/QBaseEntity.java new file mode 100644 index 0000000..b2097d3 --- /dev/null +++ b/build/generated/sources/annotationProcessor/java/main/com/example/domain/common/QBaseEntity.java @@ -0,0 +1,39 @@ +package com.example.domain.common; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; + + +/** + * QBaseEntity is a Querydsl query type for BaseEntity + */ +@Generated("com.querydsl.codegen.DefaultSupertypeSerializer") +public class QBaseEntity extends EntityPathBase { + + private static final long serialVersionUID = 118984254L; + + public static final QBaseEntity baseEntity = new QBaseEntity("baseEntity"); + + public final DateTimePath createdAt = createDateTime("createdAt", java.time.LocalDateTime.class); + + public final DateTimePath updatedAt = createDateTime("updatedAt", java.time.LocalDateTime.class); + + public QBaseEntity(String variable) { + super(BaseEntity.class, forVariable(variable)); + } + + public QBaseEntity(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QBaseEntity(PathMetadata metadata) { + super(BaseEntity.class, metadata); + } + +} + diff --git a/build/generated/sources/annotationProcessor/java/main/com/example/domain/mapping/QMemberAgree.java b/build/generated/sources/annotationProcessor/java/main/com/example/domain/mapping/QMemberAgree.java new file mode 100644 index 0000000..f9b564e --- /dev/null +++ b/build/generated/sources/annotationProcessor/java/main/com/example/domain/mapping/QMemberAgree.java @@ -0,0 +1,62 @@ +package com.example.domain.mapping; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QMemberAgree is a Querydsl query type for MemberAgree + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QMemberAgree extends EntityPathBase { + + private static final long serialVersionUID = 1811719513L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QMemberAgree memberAgree = new QMemberAgree("memberAgree"); + + public final com.example.domain.common.QBaseEntity _super = new com.example.domain.common.QBaseEntity(this); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final NumberPath id = createNumber("id", Long.class); + + public final com.example.domain.QMember member; + + public final com.example.domain.QTerms terms; + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QMemberAgree(String variable) { + this(MemberAgree.class, forVariable(variable), INITS); + } + + public QMemberAgree(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QMemberAgree(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QMemberAgree(PathMetadata metadata, PathInits inits) { + this(MemberAgree.class, metadata, inits); + } + + public QMemberAgree(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.member = inits.isInitialized("member") ? new com.example.domain.QMember(forProperty("member")) : null; + this.terms = inits.isInitialized("terms") ? new com.example.domain.QTerms(forProperty("terms")) : null; + } + +} + diff --git a/build/generated/sources/annotationProcessor/java/main/com/example/domain/mapping/QMemberMission.java b/build/generated/sources/annotationProcessor/java/main/com/example/domain/mapping/QMemberMission.java new file mode 100644 index 0000000..171a8e1 --- /dev/null +++ b/build/generated/sources/annotationProcessor/java/main/com/example/domain/mapping/QMemberMission.java @@ -0,0 +1,64 @@ +package com.example.domain.mapping; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QMemberMission is a Querydsl query type for MemberMission + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QMemberMission extends EntityPathBase { + + private static final long serialVersionUID = -575554311L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QMemberMission memberMission = new QMemberMission("memberMission"); + + public final com.example.domain.common.QBaseEntity _super = new com.example.domain.common.QBaseEntity(this); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final NumberPath id = createNumber("id", Long.class); + + public final com.example.domain.QMember member; + + public final com.example.domain.QMission mission; + + public final EnumPath status = createEnum("status", com.example.domain.enums.MissionStatus.class); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QMemberMission(String variable) { + this(MemberMission.class, forVariable(variable), INITS); + } + + public QMemberMission(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QMemberMission(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QMemberMission(PathMetadata metadata, PathInits inits) { + this(MemberMission.class, metadata, inits); + } + + public QMemberMission(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.member = inits.isInitialized("member") ? new com.example.domain.QMember(forProperty("member")) : null; + this.mission = inits.isInitialized("mission") ? new com.example.domain.QMission(forProperty("mission"), inits.get("mission")) : null; + } + +} + diff --git a/build/generated/sources/annotationProcessor/java/main/com/example/domain/mapping/QMemberPrefer.java b/build/generated/sources/annotationProcessor/java/main/com/example/domain/mapping/QMemberPrefer.java new file mode 100644 index 0000000..65ec1e0 --- /dev/null +++ b/build/generated/sources/annotationProcessor/java/main/com/example/domain/mapping/QMemberPrefer.java @@ -0,0 +1,62 @@ +package com.example.domain.mapping; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QMemberPrefer is a Querydsl query type for MemberPrefer + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QMemberPrefer extends EntityPathBase { + + private static final long serialVersionUID = 767939843L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QMemberPrefer memberPrefer = new QMemberPrefer("memberPrefer"); + + public final com.example.domain.common.QBaseEntity _super = new com.example.domain.common.QBaseEntity(this); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final com.example.domain.QFoodCategory foodCategory; + + public final NumberPath id = createNumber("id", Long.class); + + public final com.example.domain.QMember member; + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QMemberPrefer(String variable) { + this(MemberPrefer.class, forVariable(variable), INITS); + } + + public QMemberPrefer(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QMemberPrefer(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QMemberPrefer(PathMetadata metadata, PathInits inits) { + this(MemberPrefer.class, metadata, inits); + } + + public QMemberPrefer(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.foodCategory = inits.isInitialized("foodCategory") ? new com.example.domain.QFoodCategory(forProperty("foodCategory")) : null; + this.member = inits.isInitialized("member") ? new com.example.domain.QMember(forProperty("member")) : null; + } + +} + diff --git a/build/reports/problems/problems-report.html b/build/reports/problems/problems-report.html new file mode 100644 index 0000000..e69de29 diff --git a/build/resources/main/application.yml b/build/resources/main/application.yml new file mode 100644 index 0000000..e69de29 diff --git a/build/resources/main/data.sql b/build/resources/main/data.sql new file mode 100644 index 0000000..e69de29 diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000..e69de29 diff --git a/gradlew b/gradlew index faf9300..e69de29 100644 --- a/gradlew +++ b/gradlew @@ -1,251 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original 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. -# -# SPDX-License-Identifier: Apache-2.0 -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# 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 ;; #( - MSYS* | 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 - if ! command -v java >/dev/null 2>&1 - then - 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 -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# 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"' - -# Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, -# and any embedded shellness will be escaped. -# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be -# treated as '${Hostname}' itself on the command line. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 9d21a21..e69de29 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,94 +0,0 @@ -@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 -@rem SPDX-License-Identifier: Apache-2.0 -@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=. -@rem This is normally unused -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% equ 0 goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -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% equ 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! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/src/main/java/com/example/apiPayload/MemberRequestDTO.java b/src/main/java/com/example/apiPayload/MemberRequestDTO.java new file mode 100644 index 0000000..3a67af0 --- /dev/null +++ b/src/main/java/com/example/apiPayload/MemberRequestDTO.java @@ -0,0 +1,32 @@ +package com.example.apiPayload; + +import com.example.validation.annotation.ExistCategories; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Getter; + +import java.util.List; + +public class MemberRequestDTO { + + @Getter + public static class JoinDto{ + @NotBlank + String name; + @NotNull + Integer gender; + @NotNull + Integer birthYear; + @NotNull + Integer birthMonth; + @NotNull + Integer birthDay; + @Size(min = 5, max = 12) + String address; + @Size(min = 5, max = 12) + String specAddress; + @ExistCategories + List preferCategory; + } +} diff --git a/src/main/java/com/example/apiPayload/MemberResponseDTO.java b/src/main/java/com/example/apiPayload/MemberResponseDTO.java new file mode 100644 index 0000000..1e5ce26 --- /dev/null +++ b/src/main/java/com/example/apiPayload/MemberResponseDTO.java @@ -0,0 +1,19 @@ +package com.example.apiPayload; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +public class MemberResponseDTO { + @Builder + @Getter + @NoArgsConstructor + @AllArgsConstructor + public static class JoinResultDTO{ + Long memberId; + LocalDateTime createdAt; + } +} diff --git a/src/main/java/com/example/apiPayload/code/status/ErrorStatus.java b/src/main/java/com/example/apiPayload/code/status/ErrorStatus.java index c90d826..5c33671 100644 --- a/src/main/java/com/example/apiPayload/code/status/ErrorStatus.java +++ b/src/main/java/com/example/apiPayload/code/status/ErrorStatus.java @@ -2,6 +2,7 @@ import com.example.apiPayload.BaseErrorCode; import com.example.apiPayload.ErrorReasonDTO; +import com.example.domain.FoodCategory; import lombok.AllArgsConstructor; import lombok.Getter; import org.springframework.http.HttpStatus; @@ -24,7 +25,10 @@ public enum ErrorStatus implements BaseErrorCode { NICKNAME_NOT_EXIST(HttpStatus.BAD_REQUEST, "MEMBER4002", "닉네임은 필수 입니다."), // Article Error - ARTICLE_NOT_FOUND(HttpStatus.NOT_FOUND, "ARTICLE4001", "게시글이 없습니다."); + ARTICLE_NOT_FOUND(HttpStatus.NOT_FOUND, "ARTICLE4001", "게시글이 없습니다."), + + // FoodCategory Error + FOOD_CATEGORY_NOT_FOUND(HttpStatus.NOT_FOUND, "FOOD4001", "해당 음식 카테고리를 찾을 수 없습니다."); private final HttpStatus httpStatus; private final String code; diff --git a/src/main/java/com/example/apiPayload/exception/handler/FoodCategoryHandler.java b/src/main/java/com/example/apiPayload/exception/handler/FoodCategoryHandler.java new file mode 100644 index 0000000..dac4065 --- /dev/null +++ b/src/main/java/com/example/apiPayload/exception/handler/FoodCategoryHandler.java @@ -0,0 +1,11 @@ +package com.example.apiPayload.exception.handler; + +import com.example.apiPayload.code.status.ErrorStatus; +import com.example.apiPayload.exception.GeneralException; + +public class FoodCategoryHandler extends GeneralException { + + public FoodCategoryHandler(ErrorStatus errorStatus) { + super(errorStatus); + } +} diff --git a/src/main/java/com/example/config/SwaggerConfig.java b/src/main/java/com/example/config/SwaggerConfig.java new file mode 100644 index 0000000..4677578 --- /dev/null +++ b/src/main/java/com/example/config/SwaggerConfig.java @@ -0,0 +1,40 @@ +package com.example.config; + +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Info; +import io.swagger.v3.oas.models.security.SecurityRequirement; +import io.swagger.v3.oas.models.Components; +import io.swagger.v3.oas.models.security.SecurityScheme; +import io.swagger.v3.oas.models.servers.Server; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + + +@Configuration +public class SwaggerConfig { + + @Bean + public OpenAPI UMCstudyAPI() { + Info info = new Info() + .title("UMC Server WorkBook API") + .description("UMC Server WorkBook API 명세서") + .version("1.0.0"); + + String jwtSchemeName = "JWT TOKEN"; + // API 요청헤더에 인증정보 포함 + SecurityRequirement securityRequirement = new SecurityRequirement().addList(jwtSchemeName); + // SecuritySchemes 등록 + Components components = new Components() + .addSecuritySchemes(jwtSchemeName, new SecurityScheme() + .name(jwtSchemeName) + .type(SecurityScheme.Type.HTTP) // HTTP 방식 + .scheme("bearer") + .bearerFormat("JWT")); + + return new OpenAPI() + .addServersItem(new Server().url("/")) + .info(info) + .addSecurityItem(securityRequirement) + .components(components); + } +} diff --git a/src/main/java/com/example/converter/MemberConverter.java b/src/main/java/com/example/converter/MemberConverter.java new file mode 100644 index 0000000..e6ff219 --- /dev/null +++ b/src/main/java/com/example/converter/MemberConverter.java @@ -0,0 +1,44 @@ +package com.example.converter; + +import com.example.apiPayload.MemberRequestDTO; +import com.example.apiPayload.MemberResponseDTO; +import com.example.domain.Member; +import com.example.domain.enums.Gender; + +import java.time.LocalDateTime; +import java.util.ArrayList; + +public class MemberConverter { + + public static MemberResponseDTO.JoinResultDTO toJoinResultDTO(Member member){ + return MemberResponseDTO.JoinResultDTO.builder() + .memberId(member.getId()) + .createdAt(LocalDateTime.now()) + .build(); + } + + public static Member toMember(MemberRequestDTO.JoinDto request){ + + Gender gender = null; + + switch (request.getGender()){ + case 1: + gender = Gender.MALE; + break; + case 2: + gender = Gender.FEMALE; + break; + case 3: + gender = Gender.NONE; + break; + } + + return Member.builder() + .address(request.getAddress()) + .specAddress(request.getSpecAddress()) + .gender(gender) + .name(request.getName()) + .memberPreferList(new ArrayList<>()) + .build(); + } +} diff --git a/src/main/java/com/example/converter/MemberPreferConverter.java b/src/main/java/com/example/converter/MemberPreferConverter.java new file mode 100644 index 0000000..128695b --- /dev/null +++ b/src/main/java/com/example/converter/MemberPreferConverter.java @@ -0,0 +1,21 @@ +package com.example.converter; + +import com.example.domain.FoodCategory; +import com.example.domain.mapping.MemberPrefer; + +import java.util.List; +import java.util.stream.Collectors; + +public class MemberPreferConverter { + + public static List toMemberPreferList(List foodCategoryList){ + + return foodCategoryList.stream() + .map(foodCategory -> + MemberPrefer.builder() + .foodCategory(foodCategory) + .build() + ).collect(Collectors.toList()); + } +} + diff --git a/src/main/java/com/example/domain/Member.java b/src/main/java/com/example/domain/Member.java index bd9b69a..b64b627 100644 --- a/src/main/java/com/example/domain/Member.java +++ b/src/main/java/com/example/domain/Member.java @@ -11,6 +11,9 @@ import jakarta.persistence.*; import lombok.*; +import org.hibernate.annotations.ColumnDefault; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; import java.time.LocalDate; import java.util.ArrayList; @@ -18,6 +21,8 @@ @Entity @Getter +@DynamicUpdate +@DynamicInsert @Builder @NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor @@ -49,9 +54,10 @@ public class Member extends BaseEntity { private LocalDate inactiveDate; - @Column(nullable = false, length = 50) + //@Column(nullable = false, length = 50) private String email; + @ColumnDefault("0") private Integer point; @OneToMany(mappedBy = "member", cascade = CascadeType.ALL) diff --git a/src/main/java/com/example/domain/enums/Gender.java b/src/main/java/com/example/domain/enums/Gender.java index 2734dd4..c486e58 100644 --- a/src/main/java/com/example/domain/enums/Gender.java +++ b/src/main/java/com/example/domain/enums/Gender.java @@ -1,5 +1,5 @@ package com.example.domain.enums; public enum Gender { - MALE, FEMALE + MALE, FEMALE, NONE } diff --git a/src/main/java/com/example/domain/mapping/MemberPrefer.java b/src/main/java/com/example/domain/mapping/MemberPrefer.java index 23cb80f..17c42df 100644 --- a/src/main/java/com/example/domain/mapping/MemberPrefer.java +++ b/src/main/java/com/example/domain/mapping/MemberPrefer.java @@ -31,4 +31,15 @@ public class MemberPrefer extends BaseEntity { @JoinColumn(name = "category_id") private FoodCategory foodCategory; + public void setMember(Member member){ + if(this.member != null) + member.getMemberPreferList().remove(this); + this.member = member; + member.getMemberPreferList().add(this); + } + + public void setFoodCategory(FoodCategory foodCategory){ + this.foodCategory = foodCategory; + } + } diff --git a/src/main/java/com/example/repository/FoodCategoryRepository/FoodCategoryRepository.java b/src/main/java/com/example/repository/FoodCategoryRepository/FoodCategoryRepository.java new file mode 100644 index 0000000..c587a82 --- /dev/null +++ b/src/main/java/com/example/repository/FoodCategoryRepository/FoodCategoryRepository.java @@ -0,0 +1,7 @@ +package com.example.repository.FoodCategoryRepository; + +import com.example.domain.FoodCategory; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface FoodCategoryRepository extends JpaRepository { +} diff --git a/src/main/java/com/example/repository/MemberRepository/MemberRepository.java b/src/main/java/com/example/repository/MemberRepository/MemberRepository.java new file mode 100644 index 0000000..197df51 --- /dev/null +++ b/src/main/java/com/example/repository/MemberRepository/MemberRepository.java @@ -0,0 +1,7 @@ +package com.example.repository.MemberRepository; + +import com.example.domain.Member; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface MemberRepository extends JpaRepository { +} diff --git a/src/main/java/com/example/service/MemberService/MemberCommandService.java b/src/main/java/com/example/service/MemberService/MemberCommandService.java new file mode 100644 index 0000000..f536d28 --- /dev/null +++ b/src/main/java/com/example/service/MemberService/MemberCommandService.java @@ -0,0 +1,9 @@ +package com.example.service.MemberService; + +import com.example.apiPayload.MemberRequestDTO; +import com.example.domain.Member; + +public interface MemberCommandService { + Member joinMember(MemberRequestDTO.JoinDto request); +} + diff --git a/src/main/java/com/example/service/MemberService/MemberCommandServiceImpl.java b/src/main/java/com/example/service/MemberService/MemberCommandServiceImpl.java new file mode 100644 index 0000000..53c08db --- /dev/null +++ b/src/main/java/com/example/service/MemberService/MemberCommandServiceImpl.java @@ -0,0 +1,44 @@ +package com.example.service.MemberService; + +import com.example.apiPayload.MemberRequestDTO; +import com.example.apiPayload.code.status.ErrorStatus; +import com.example.apiPayload.exception.handler.FoodCategoryHandler; +import com.example.converter.MemberConverter; +import com.example.converter.MemberPreferConverter; +import com.example.domain.FoodCategory; +import com.example.domain.Member; +import com.example.domain.mapping.MemberPrefer; +import com.example.repository.FoodCategoryRepository.FoodCategoryRepository; +import com.example.repository.MemberRepository.MemberRepository; +import jakarta.transaction.Transactional; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor +public class MemberCommandServiceImpl implements MemberCommandService{ + + private final MemberRepository memberRepository; + + private final FoodCategoryRepository foodCategoryRepository; + + @Override + @Transactional + public Member joinMember(MemberRequestDTO.JoinDto request) { + + Member newMember = MemberConverter.toMember(request); + List foodCategoryList = request.getPreferCategory().stream() + .map(category -> { + return foodCategoryRepository.findById(category).orElseThrow(() -> new FoodCategoryHandler(ErrorStatus.FOOD_CATEGORY_NOT_FOUND)); + }).collect(Collectors.toList()); + + List memberPreferList = MemberPreferConverter.toMemberPreferList(foodCategoryList); + + memberPreferList.forEach(memberPrefer -> {memberPrefer.setMember(newMember);}); + + return memberRepository.save(newMember); + } +} diff --git a/src/main/java/com/example/service/MemberService/MemberQureyService.java b/src/main/java/com/example/service/MemberService/MemberQureyService.java new file mode 100644 index 0000000..9baa803 --- /dev/null +++ b/src/main/java/com/example/service/MemberService/MemberQureyService.java @@ -0,0 +1,4 @@ +package com.example.service.MemberService; + +public interface MemberQureyService { +} diff --git a/src/main/java/com/example/service/MemberService/MemberQureyServiceImpl.java b/src/main/java/com/example/service/MemberService/MemberQureyServiceImpl.java new file mode 100644 index 0000000..e9a9d00 --- /dev/null +++ b/src/main/java/com/example/service/MemberService/MemberQureyServiceImpl.java @@ -0,0 +1,4 @@ +package com.example.service.MemberService; + +public class MemberQureyServiceImpl { +} diff --git a/src/main/java/com/example/validation/annotation/ExistCategories.java b/src/main/java/com/example/validation/annotation/ExistCategories.java new file mode 100644 index 0000000..f89a37f --- /dev/null +++ b/src/main/java/com/example/validation/annotation/ExistCategories.java @@ -0,0 +1,18 @@ +package com.example.validation.annotation; + +import com.example.validation.validator.CategoriesExistValidator; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; + +import java.lang.annotation.*; + +@Documented +@Constraint(validatedBy = CategoriesExistValidator.class) +@Target( { ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER }) +@Retention(RetentionPolicy.RUNTIME) +public @interface ExistCategories { + + String message() default "해당하는 카테고리가 존재하지 않습니다."; + Class[] groups() default {}; + Class[] payload() default {}; +} diff --git a/src/main/java/com/example/validation/validator/CategoriesExistValidator.java b/src/main/java/com/example/validation/validator/CategoriesExistValidator.java new file mode 100644 index 0000000..cd2276e --- /dev/null +++ b/src/main/java/com/example/validation/validator/CategoriesExistValidator.java @@ -0,0 +1,37 @@ +package com.example.validation.validator; + +import com.example.apiPayload.code.status.ErrorStatus; +import com.example.repository.FoodCategoryRepository.FoodCategoryRepository; +import com.example.validation.annotation.ExistCategories; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +@RequiredArgsConstructor +public class CategoriesExistValidator implements ConstraintValidator> { + + private final FoodCategoryRepository foodCategoryRepository; + + @Override + public void initialize(ExistCategories constraintAnnotation) { + ConstraintValidator.super.initialize(constraintAnnotation); + } + + @Override + public boolean isValid(List values, ConstraintValidatorContext context) { + boolean isValid = values.stream() + .allMatch(value -> foodCategoryRepository.existsById(value)); + + if (!isValid) { + context.disableDefaultConstraintViolation(); + context.buildConstraintViolationWithTemplate(ErrorStatus.FOOD_CATEGORY_NOT_FOUND.toString()).addConstraintViolation(); + } + + return isValid; + + } +} \ No newline at end of file diff --git a/src/main/java/com/example/web/controller/MemberRestController.java b/src/main/java/com/example/web/controller/MemberRestController.java new file mode 100644 index 0000000..fcf4387 --- /dev/null +++ b/src/main/java/com/example/web/controller/MemberRestController.java @@ -0,0 +1,28 @@ +package com.example.web.controller; + +import com.example.apiPayload.ApiResponse; +import com.example.apiPayload.MemberRequestDTO; +import com.example.apiPayload.MemberResponseDTO; +import com.example.converter.MemberConverter; +import com.example.domain.Member; +import com.example.service.MemberService.MemberCommandService; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/members") +public class MemberRestController { + + private final MemberCommandService memberCommandService; + + @PostMapping("/") + public ApiResponse join(@RequestBody @Valid MemberRequestDTO.JoinDto request){ + Member member = memberCommandService.joinMember(request); + return ApiResponse.onSuccess(MemberConverter.toJoinResultDTO(member)); + } +} diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql index ff47487..e69de29 100644 --- a/src/main/resources/data.sql +++ b/src/main/resources/data.sql @@ -1,24 +0,0 @@ -INSERT INTO region (id, name, created_at, updated_at) -VALUES (1, '서울', NOW(), NOW()), - (2, '부산', NOW(), NOW()), - (3, '인천', NOW(), NOW()); - -INSERT INTO store (id, name, address, score, region_id, created_at, updated_at) -VALUES (1, 'Store 1', '서울시 서대문구 이화여대길 52', 4.5, 1, NOW(), NOW()), - (2, 'Store 2', '서울시 마포구 연남동', 3.8, 1, NOW(), NOW()), - (3, 'Store 3', '서울시 동작구 흑석동', 2.2, 1, NOW(), NOW()), - (4, '요아정', '서울시 용산구 이태원동', 4.0, 1, NOW(), NOW()), - (5, '요아정', '서울시 서대문구 이화여대길 52', 3.2, 1, NOW(), NOW()), - (6, '요아정', '서울시 강남구 대치동', 4.5, 1, NOW(), NOW()); - -INSERT INTO mission (id, mission_spec, store_id, created_at, updated_at) -VALUES (1, 'Store 1-미션 1', 1, NOW(), NOW()), - (2, 'Store 1-미션 2', 1, NOW(), NOW()), - (3, 'Store 2-미션 1', 2, NOW(), NOW()), - (4, 'Store 3-미션 1', 3, NOW(), NOW()); - -INSERT INTO review (id, body, score, store_id, created_at, updated_at) -VALUES (1, '너무 좋아요!', 5.0, 1, NOW(), NOW()), - (2, '분위기 짱~', 3.0, 1, NOW(), NOW()), - (3, '서비스가 좋습니다', 4.8, 2, NOW(), NOW()), - (4, '음식이 맛있고 사장님이 친절해요', 4.5, 3, NOW(), NOW()); From 3c2faf0f77c57cb47593e19cff79aae38837146b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=98=88=EC=A7=84=20=EB=B0=95?= Date: Mon, 26 May 2025 13:36:32 +0900 Subject: [PATCH 5/7] =?UTF-8?q?8=EC=A3=BC=EC=B0=A8=20=EC=8B=A4=EC=8A=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/example/converter/MemberConverter.java | 4 ++-- .../example/service/MemberService/MemberCommandService.java | 2 +- .../service/MemberService/MemberCommandServiceImpl.java | 2 +- .../java/com/example/web/controller/MemberRestController.java | 4 ++-- .../com/example/{apiPayload => web/dto}/MemberRequestDTO.java | 2 +- .../example/{apiPayload => web/dto}/MemberResponseDTO.java | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) rename src/main/java/com/example/{apiPayload => web/dto}/MemberRequestDTO.java (95%) rename src/main/java/com/example/{apiPayload => web/dto}/MemberResponseDTO.java (91%) diff --git a/src/main/java/com/example/converter/MemberConverter.java b/src/main/java/com/example/converter/MemberConverter.java index e6ff219..e75b135 100644 --- a/src/main/java/com/example/converter/MemberConverter.java +++ b/src/main/java/com/example/converter/MemberConverter.java @@ -1,7 +1,7 @@ package com.example.converter; -import com.example.apiPayload.MemberRequestDTO; -import com.example.apiPayload.MemberResponseDTO; +import com.example.web.dto.MemberRequestDTO; +import com.example.web.dto.MemberResponseDTO; import com.example.domain.Member; import com.example.domain.enums.Gender; diff --git a/src/main/java/com/example/service/MemberService/MemberCommandService.java b/src/main/java/com/example/service/MemberService/MemberCommandService.java index f536d28..9e08163 100644 --- a/src/main/java/com/example/service/MemberService/MemberCommandService.java +++ b/src/main/java/com/example/service/MemberService/MemberCommandService.java @@ -1,6 +1,6 @@ package com.example.service.MemberService; -import com.example.apiPayload.MemberRequestDTO; +import com.example.web.dto.MemberRequestDTO; import com.example.domain.Member; public interface MemberCommandService { diff --git a/src/main/java/com/example/service/MemberService/MemberCommandServiceImpl.java b/src/main/java/com/example/service/MemberService/MemberCommandServiceImpl.java index 53c08db..3289f0f 100644 --- a/src/main/java/com/example/service/MemberService/MemberCommandServiceImpl.java +++ b/src/main/java/com/example/service/MemberService/MemberCommandServiceImpl.java @@ -1,6 +1,6 @@ package com.example.service.MemberService; -import com.example.apiPayload.MemberRequestDTO; +import com.example.web.dto.MemberRequestDTO; import com.example.apiPayload.code.status.ErrorStatus; import com.example.apiPayload.exception.handler.FoodCategoryHandler; import com.example.converter.MemberConverter; diff --git a/src/main/java/com/example/web/controller/MemberRestController.java b/src/main/java/com/example/web/controller/MemberRestController.java index fcf4387..194d7b7 100644 --- a/src/main/java/com/example/web/controller/MemberRestController.java +++ b/src/main/java/com/example/web/controller/MemberRestController.java @@ -1,8 +1,8 @@ package com.example.web.controller; import com.example.apiPayload.ApiResponse; -import com.example.apiPayload.MemberRequestDTO; -import com.example.apiPayload.MemberResponseDTO; +import com.example.web.dto.MemberRequestDTO; +import com.example.web.dto.MemberResponseDTO; import com.example.converter.MemberConverter; import com.example.domain.Member; import com.example.service.MemberService.MemberCommandService; diff --git a/src/main/java/com/example/apiPayload/MemberRequestDTO.java b/src/main/java/com/example/web/dto/MemberRequestDTO.java similarity index 95% rename from src/main/java/com/example/apiPayload/MemberRequestDTO.java rename to src/main/java/com/example/web/dto/MemberRequestDTO.java index 3a67af0..95e5786 100644 --- a/src/main/java/com/example/apiPayload/MemberRequestDTO.java +++ b/src/main/java/com/example/web/dto/MemberRequestDTO.java @@ -1,4 +1,4 @@ -package com.example.apiPayload; +package com.example.web.dto; import com.example.validation.annotation.ExistCategories; import jakarta.validation.constraints.NotBlank; diff --git a/src/main/java/com/example/apiPayload/MemberResponseDTO.java b/src/main/java/com/example/web/dto/MemberResponseDTO.java similarity index 91% rename from src/main/java/com/example/apiPayload/MemberResponseDTO.java rename to src/main/java/com/example/web/dto/MemberResponseDTO.java index 1e5ce26..17cafdc 100644 --- a/src/main/java/com/example/apiPayload/MemberResponseDTO.java +++ b/src/main/java/com/example/web/dto/MemberResponseDTO.java @@ -1,4 +1,4 @@ -package com.example.apiPayload; +package com.example.web.dto; import lombok.AllArgsConstructor; import lombok.Builder; From acbcd9f456012ffa0a1ccd9e2506fe598802214f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=98=88=EC=A7=84=20=EB=B0=95?= Date: Mon, 26 May 2025 16:14:01 +0900 Subject: [PATCH 6/7] =?UTF-8?q?9=EC=A3=BC=EC=B0=A8=20=EC=8B=A4=EC=8A=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gradle/8.13/checksums/checksums.lock | Bin 0 -> 17 bytes .../executionHistory/executionHistory.bin | Bin 0 -> 159693 bytes .../executionHistory/executionHistory.lock | Bin 0 -> 17 bytes .gradle/8.13/fileChanges/last-build.bin | Bin 0 -> 1 bytes .gradle/8.13/fileHashes/fileHashes.bin | Bin 0 -> 27297 bytes .gradle/8.13/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../8.13/fileHashes/resourceHashesCache.bin | Bin 0 -> 20843 bytes .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .gradle/buildOutputCleanup/cache.properties | 2 + .gradle/buildOutputCleanup/outputFiles.bin | Bin 0 -> 18911 bytes .gradle/file-system.probe | Bin 0 -> 8 bytes .idea/modules/spring.main.iml | 12 - .../java/main/com/example/Application.class | Bin 0 -> 820 bytes .../com/example/apiPayload/ApiResponse.class | Bin 0 -> 3310 bytes .../com/example/apiPayload/BaseCode.class | Bin 0 -> 209 bytes .../example/apiPayload/BaseErrorCode.class | Bin 0 -> 224 bytes ...ErrorReasonDTO$ErrorReasonDTOBuilder.class | Bin 0 -> 2419 bytes .../example/apiPayload/ErrorReasonDTO.class | Bin 0 -> 1426 bytes .../ReasonDTO$ReasonDTOBuilder.class | Bin 0 -> 2339 bytes .../com/example/apiPayload/ReasonDTO.class | Bin 0 -> 1386 bytes .../apiPayload/code/status/ErrorStatus.class | Bin 0 -> 4218 bytes .../code/status/SuccessStatus.class | Bin 0 -> 2910 bytes .../exception/ExceptionAdvice.class | Bin 0 -> 11197 bytes .../exception/GeneralException.class | Bin 0 -> 1009 bytes .../handler/FoodCategoryHandler.class | Bin 0 -> 599 bytes .../exception/handler/TempHandler.class | Bin 0 -> 509 bytes .../com/example/config/QueryDSLConfig.class | Bin 0 -> 866 bytes .../com/example/config/SwaggerConfig.class | Bin 0 -> 2708 bytes .../example/converter/MemberConverter.class | Bin 0 -> 2742 bytes .../converter/MemberPreferConverter.class | Bin 0 -> 2297 bytes .../example/converter/StoreConverter.class | Bin 0 -> 4726 bytes .../com/example/converter/TempConverter.class | Bin 0 -> 1600 bytes .../FoodCategory$FoodCategoryBuilder.class | Bin 0 -> 1777 bytes .../com/example/domain/FoodCategory.class | Bin 0 -> 1424 bytes .../example/domain/Member$MemberBuilder.class | Bin 0 -> 5653 bytes .../java/main/com/example/domain/Member.class | Bin 0 -> 5600 bytes .../domain/Mission$MissionBuilder.class | Bin 0 -> 3520 bytes .../main/com/example/domain/Mission.class | Bin 0 -> 3167 bytes .../com/example/domain/QFoodCategory.class | Bin 0 -> 2609 bytes .../main/com/example/domain/QMember.class | Bin 0 -> 5603 bytes .../main/com/example/domain/QMission.class | Bin 0 -> 4830 bytes .../main/com/example/domain/QRegion.class | Bin 0 -> 2561 bytes .../main/com/example/domain/QReview.class | Bin 0 -> 4075 bytes .../java/main/com/example/domain/QStore.class | Bin 0 -> 4476 bytes .../java/main/com/example/domain/QTerms.class | Bin 0 -> 3458 bytes .../example/domain/Region$RegionBuilder.class | Bin 0 -> 1693 bytes .../java/main/com/example/domain/Region.class | Bin 0 -> 1376 bytes .../example/domain/Review$ReviewBuilder.class | Bin 0 -> 2834 bytes .../java/main/com/example/domain/Review.class | Bin 0 -> 2833 bytes .../example/domain/Store$StoreBuilder.class | Bin 0 -> 3379 bytes .../java/main/com/example/domain/Store.class | Bin 0 -> 4057 bytes .../example/domain/Terms$TermsBuilder.class | Bin 0 -> 2750 bytes .../java/main/com/example/domain/Terms.class | Bin 0 -> 2373 bytes .../example/domain/common/BaseEntity.class | Bin 0 -> 997 bytes .../example/domain/common/QBaseEntity.class | Bin 0 -> 2093 bytes .../com/example/domain/enums/Gender.class | Bin 0 -> 1176 bytes .../example/domain/enums/MemberStatus.class | Bin 0 -> 1175 bytes .../example/domain/enums/MissionStatus.class | Bin 0 -> 1187 bytes .../com/example/domain/enums/SocialType.class | Bin 0 -> 1254 bytes .../MemberAgree$MemberAgreeBuilder.class | Bin 0 -> 2245 bytes .../example/domain/mapping/MemberAgree.class | Bin 0 -> 1815 bytes .../MemberMission$MemberMissionBuilder.class | Bin 0 -> 2652 bytes .../domain/mapping/MemberMission.class | Bin 0 -> 2297 bytes .../MemberPrefer$MemberPreferBuilder.class | Bin 0 -> 2296 bytes .../example/domain/mapping/MemberPrefer.class | Bin 0 -> 2366 bytes .../example/domain/mapping/QMemberAgree.class | Bin 0 -> 3753 bytes .../domain/mapping/QMemberMission.class | Bin 0 -> 4186 bytes .../domain/mapping/QMemberPrefer.class | Bin 0 -> 3784 bytes .../FoodCategoryRepository.class | Bin 0 -> 379 bytes .../MemberRepository/MemberRepository.class | Bin 0 -> 355 bytes .../example/repository/ReviewRepository.class | Bin 0 -> 684 bytes .../StoreRepository/StoreRepository.class | Bin 0 -> 481 bytes .../StoreRepositoryCustom.class | Bin 0 -> 412 bytes .../StoreRepository/StoreRepositoryImpl.class | Bin 0 -> 2268 bytes .../MemberService/MemberCommandService.class | Bin 0 -> 427 bytes .../MemberCommandServiceImpl.class | Bin 0 -> 4581 bytes .../MemberService/MemberQureyService.class | Bin 0 -> 151 bytes .../MemberQureyServiceImpl.class | Bin 0 -> 359 bytes .../StoreService/StoreQueryService.class | Bin 0 -> 795 bytes .../StoreService/StoreQueryServiceImpl.class | Bin 0 -> 4109 bytes .../TempService/TempCommandService.class | Bin 0 -> 149 bytes .../TempService/TempCommandServiceImpl.class | Bin 0 -> 559 bytes .../TempService/TempQueryService.class | Bin 0 -> 227 bytes .../TempService/TempQueryServiceImpl.class | Bin 0 -> 1058 bytes .../annotation/ExistCategories.class | Bin 0 -> 921 bytes .../validation/annotation/ExistStore.class | Bin 0 -> 900 bytes .../validator/CategoriesExistValidator.class | Bin 0 -> 3702 bytes .../validator/StoreExistValidator.class | Bin 0 -> 2775 bytes .../web/controller/MemberRestController.class | Bin 0 -> 2223 bytes .../web/controller/StoreRestController.class | Bin 0 -> 2901 bytes .../web/controller/TempRestController.class | Bin 0 -> 2204 bytes .../web/dto/MemberRequestDTO$JoinDto.class | Bin 0 -> 2151 bytes .../example/web/dto/MemberRequestDTO.class | Bin 0 -> 428 bytes ...O$JoinResultDTO$JoinResultDTOBuilder.class | Bin 0 -> 2123 bytes .../dto/MemberResponseDTO$JoinResultDTO.class | Bin 0 -> 1293 bytes .../example/web/dto/MemberResponseDTO.class | Bin 0 -> 555 bytes .../com/example/web/dto/StoreRequestDTO.class | Bin 0 -> 310 bytes ...ewPreViewDTO$ReviewPreViewDTOBuilder.class | Bin 0 -> 2653 bytes .../StoreResponseDTO$ReviewPreViewDTO.class | Bin 0 -> 1649 bytes ...wListDTO$ReviewPreViewListDTOBuilder.class | Bin 0 -> 3637 bytes ...toreResponseDTO$ReviewPreViewListDTO.class | Bin 0 -> 2525 bytes .../example/web/dto/StoreResponseDTO.class | Bin 0 -> 792 bytes .../com/example/web/dto/TempRequest.class | Bin 0 -> 298 bytes ...ExceptionDTO$TempExceptionDTOBuilder.class | Bin 0 -> 1703 bytes .../dto/TempResponse$TempExceptionDTO.class | Bin 0 -> 1068 bytes ...ponse$TempTestDTO$TempTestDTOBuilder.class | Bin 0 -> 1651 bytes .../web/dto/TempResponse$TempTestDTO.class | Bin 0 -> 1037 bytes .../com/example/web/dto/TempResponse.class | Bin 0 -> 719 bytes .../java/main/com/example/domain/QReview.java | 2 + build/reports/problems/problems-report.html | 663 ++++++++++++++++++ build/resources/main/application.yml | 19 + .../compileJava/previous-compilation-data.bin | Bin 0 -> 66280 bytes .../apiPayload/code/status/ErrorStatus.java | 8 +- .../com/example/converter/StoreConverter.java | 33 + src/main/java/com/example/domain/Review.java | 19 + .../example/repository/ReviewRepository.java | 12 + .../StoreService/StoreQueryService.java | 5 +- .../StoreService/StoreQueryServiceImpl.java | 21 +- .../validation/annotation/ExistStore.java | 17 + .../validator/StoreExistValidator.java | 36 + .../web/controller/StoreRestController.java | 41 ++ .../com/example/web/dto/StoreRequestDTO.java | 4 + .../com/example/web/dto/StoreResponseDTO.java | 35 + 123 files changed, 913 insertions(+), 16 deletions(-) create mode 100644 build/classes/java/main/com/example/Application.class create mode 100644 build/classes/java/main/com/example/apiPayload/ApiResponse.class create mode 100644 build/classes/java/main/com/example/apiPayload/BaseCode.class create mode 100644 build/classes/java/main/com/example/apiPayload/BaseErrorCode.class create mode 100644 build/classes/java/main/com/example/apiPayload/ErrorReasonDTO$ErrorReasonDTOBuilder.class create mode 100644 build/classes/java/main/com/example/apiPayload/ErrorReasonDTO.class create mode 100644 build/classes/java/main/com/example/apiPayload/ReasonDTO$ReasonDTOBuilder.class create mode 100644 build/classes/java/main/com/example/apiPayload/ReasonDTO.class create mode 100644 build/classes/java/main/com/example/apiPayload/code/status/ErrorStatus.class create mode 100644 build/classes/java/main/com/example/apiPayload/code/status/SuccessStatus.class create mode 100644 build/classes/java/main/com/example/apiPayload/exception/ExceptionAdvice.class create mode 100644 build/classes/java/main/com/example/apiPayload/exception/GeneralException.class create mode 100644 build/classes/java/main/com/example/apiPayload/exception/handler/FoodCategoryHandler.class create mode 100644 build/classes/java/main/com/example/apiPayload/exception/handler/TempHandler.class create mode 100644 build/classes/java/main/com/example/config/QueryDSLConfig.class create mode 100644 build/classes/java/main/com/example/config/SwaggerConfig.class create mode 100644 build/classes/java/main/com/example/converter/MemberConverter.class create mode 100644 build/classes/java/main/com/example/converter/MemberPreferConverter.class create mode 100644 build/classes/java/main/com/example/converter/StoreConverter.class create mode 100644 build/classes/java/main/com/example/converter/TempConverter.class create mode 100644 build/classes/java/main/com/example/domain/FoodCategory$FoodCategoryBuilder.class create mode 100644 build/classes/java/main/com/example/domain/FoodCategory.class create mode 100644 build/classes/java/main/com/example/domain/Member$MemberBuilder.class create mode 100644 build/classes/java/main/com/example/domain/Member.class create mode 100644 build/classes/java/main/com/example/domain/Mission$MissionBuilder.class create mode 100644 build/classes/java/main/com/example/domain/Mission.class create mode 100644 build/classes/java/main/com/example/domain/QFoodCategory.class create mode 100644 build/classes/java/main/com/example/domain/QMember.class create mode 100644 build/classes/java/main/com/example/domain/QMission.class create mode 100644 build/classes/java/main/com/example/domain/QRegion.class create mode 100644 build/classes/java/main/com/example/domain/QReview.class create mode 100644 build/classes/java/main/com/example/domain/QStore.class create mode 100644 build/classes/java/main/com/example/domain/QTerms.class create mode 100644 build/classes/java/main/com/example/domain/Region$RegionBuilder.class create mode 100644 build/classes/java/main/com/example/domain/Region.class create mode 100644 build/classes/java/main/com/example/domain/Review$ReviewBuilder.class create mode 100644 build/classes/java/main/com/example/domain/Review.class create mode 100644 build/classes/java/main/com/example/domain/Store$StoreBuilder.class create mode 100644 build/classes/java/main/com/example/domain/Store.class create mode 100644 build/classes/java/main/com/example/domain/Terms$TermsBuilder.class create mode 100644 build/classes/java/main/com/example/domain/Terms.class create mode 100644 build/classes/java/main/com/example/domain/common/BaseEntity.class create mode 100644 build/classes/java/main/com/example/domain/common/QBaseEntity.class create mode 100644 build/classes/java/main/com/example/domain/enums/Gender.class create mode 100644 build/classes/java/main/com/example/domain/enums/MemberStatus.class create mode 100644 build/classes/java/main/com/example/domain/enums/MissionStatus.class create mode 100644 build/classes/java/main/com/example/domain/enums/SocialType.class create mode 100644 build/classes/java/main/com/example/domain/mapping/MemberAgree$MemberAgreeBuilder.class create mode 100644 build/classes/java/main/com/example/domain/mapping/MemberAgree.class create mode 100644 build/classes/java/main/com/example/domain/mapping/MemberMission$MemberMissionBuilder.class create mode 100644 build/classes/java/main/com/example/domain/mapping/MemberMission.class create mode 100644 build/classes/java/main/com/example/domain/mapping/MemberPrefer$MemberPreferBuilder.class create mode 100644 build/classes/java/main/com/example/domain/mapping/MemberPrefer.class create mode 100644 build/classes/java/main/com/example/domain/mapping/QMemberAgree.class create mode 100644 build/classes/java/main/com/example/domain/mapping/QMemberMission.class create mode 100644 build/classes/java/main/com/example/domain/mapping/QMemberPrefer.class create mode 100644 build/classes/java/main/com/example/repository/FoodCategoryRepository/FoodCategoryRepository.class create mode 100644 build/classes/java/main/com/example/repository/MemberRepository/MemberRepository.class create mode 100644 build/classes/java/main/com/example/repository/ReviewRepository.class create mode 100644 build/classes/java/main/com/example/repository/StoreRepository/StoreRepository.class create mode 100644 build/classes/java/main/com/example/repository/StoreRepository/StoreRepositoryCustom.class create mode 100644 build/classes/java/main/com/example/repository/StoreRepository/StoreRepositoryImpl.class create mode 100644 build/classes/java/main/com/example/service/MemberService/MemberCommandService.class create mode 100644 build/classes/java/main/com/example/service/MemberService/MemberCommandServiceImpl.class create mode 100644 build/classes/java/main/com/example/service/MemberService/MemberQureyService.class create mode 100644 build/classes/java/main/com/example/service/MemberService/MemberQureyServiceImpl.class create mode 100644 build/classes/java/main/com/example/service/StoreService/StoreQueryService.class create mode 100644 build/classes/java/main/com/example/service/StoreService/StoreQueryServiceImpl.class create mode 100644 build/classes/java/main/com/example/service/TempService/TempCommandService.class create mode 100644 build/classes/java/main/com/example/service/TempService/TempCommandServiceImpl.class create mode 100644 build/classes/java/main/com/example/service/TempService/TempQueryService.class create mode 100644 build/classes/java/main/com/example/service/TempService/TempQueryServiceImpl.class create mode 100644 build/classes/java/main/com/example/validation/annotation/ExistCategories.class create mode 100644 build/classes/java/main/com/example/validation/annotation/ExistStore.class create mode 100644 build/classes/java/main/com/example/validation/validator/CategoriesExistValidator.class create mode 100644 build/classes/java/main/com/example/validation/validator/StoreExistValidator.class create mode 100644 build/classes/java/main/com/example/web/controller/MemberRestController.class create mode 100644 build/classes/java/main/com/example/web/controller/StoreRestController.class create mode 100644 build/classes/java/main/com/example/web/controller/TempRestController.class create mode 100644 build/classes/java/main/com/example/web/dto/MemberRequestDTO$JoinDto.class create mode 100644 build/classes/java/main/com/example/web/dto/MemberRequestDTO.class create mode 100644 build/classes/java/main/com/example/web/dto/MemberResponseDTO$JoinResultDTO$JoinResultDTOBuilder.class create mode 100644 build/classes/java/main/com/example/web/dto/MemberResponseDTO$JoinResultDTO.class create mode 100644 build/classes/java/main/com/example/web/dto/MemberResponseDTO.class create mode 100644 build/classes/java/main/com/example/web/dto/StoreRequestDTO.class create mode 100644 build/classes/java/main/com/example/web/dto/StoreResponseDTO$ReviewPreViewDTO$ReviewPreViewDTOBuilder.class create mode 100644 build/classes/java/main/com/example/web/dto/StoreResponseDTO$ReviewPreViewDTO.class create mode 100644 build/classes/java/main/com/example/web/dto/StoreResponseDTO$ReviewPreViewListDTO$ReviewPreViewListDTOBuilder.class create mode 100644 build/classes/java/main/com/example/web/dto/StoreResponseDTO$ReviewPreViewListDTO.class create mode 100644 build/classes/java/main/com/example/web/dto/StoreResponseDTO.class create mode 100644 build/classes/java/main/com/example/web/dto/TempRequest.class create mode 100644 build/classes/java/main/com/example/web/dto/TempResponse$TempExceptionDTO$TempExceptionDTOBuilder.class create mode 100644 build/classes/java/main/com/example/web/dto/TempResponse$TempExceptionDTO.class create mode 100644 build/classes/java/main/com/example/web/dto/TempResponse$TempTestDTO$TempTestDTOBuilder.class create mode 100644 build/classes/java/main/com/example/web/dto/TempResponse$TempTestDTO.class create mode 100644 build/classes/java/main/com/example/web/dto/TempResponse.class create mode 100644 src/main/java/com/example/converter/StoreConverter.java create mode 100644 src/main/java/com/example/repository/ReviewRepository.java create mode 100644 src/main/java/com/example/validation/annotation/ExistStore.java create mode 100644 src/main/java/com/example/validation/validator/StoreExistValidator.java create mode 100644 src/main/java/com/example/web/controller/StoreRestController.java create mode 100644 src/main/java/com/example/web/dto/StoreRequestDTO.java create mode 100644 src/main/java/com/example/web/dto/StoreResponseDTO.java diff --git a/.gradle/8.13/checksums/checksums.lock b/.gradle/8.13/checksums/checksums.lock index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e3b28a8972a26233f0c93b45906be1a834159fd5 100644 GIT binary patch literal 17 TcmZSHsX2FRYtQ^v1}FdkHzfpZ literal 0 HcmV?d00001 diff --git a/.gradle/8.13/executionHistory/executionHistory.bin b/.gradle/8.13/executionHistory/executionHistory.bin index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e72ef2090a1a79590bd4dfb8b3ca41996de4a425 100644 GIT binary patch literal 159693 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%0DuoCbxHJgxwHXpZ3 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 literal 0 HcmV?d00001 diff --git a/.gradle/8.13/executionHistory/executionHistory.lock b/.gradle/8.13/executionHistory/executionHistory.lock index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a710ce037057e5d869a51a7f9642129d99d9834a 100644 GIT binary patch literal 17 UcmZQx6~p$d`lZ7w1_Ki}u9=drn;)@Og$`mSN`(_PZ0P!{q1MTPP|Meu)qWcKFfzc%03!p83@|dl$N(b)|5q|# z2|B_FJF`fJ3HyQf0EMz{KKSA8@ud})M=IQm;U61T;s5{Oc+ssWO1`%aPc2^IJCgdn404|vbUqV*=qr0@ z6y(M$aDF;MepAq?)76mM?V|H(`yO`v<@+JGl*Dno133Dpyjn|{Ul)qv5Gnq!5DkelQ9ZbxWq$PLnPo_oGYj4j092=SLV&(r4oG;yN+E#yA@IKORu ztR^e#@HxosYw7%4-@-dr)ptVfMV}A(C&h*P-ffJ5+_)dFe^=kuc7O5MO33x;dAlDR z;ZvQTaTs#9bi97y$tRL;Pw=9AIymFJc+_^N+da(<-Jia`N@A`{-;O;Z0=d(2y#Axg z+n&$)RWCtqX^r!;n1Z9X*Q%oR#qxT}>t$tWu)fm{ zoWJxE;u;EnTU zm#-i1XCA!|xwRqATdF#K^xZBy4Y|7_&fm$)J!4{1eh0aJI?msl{nHtxtZD7{$s|4^Uqd|3F}!mq5au&70%lh?dq03uole+qn~sh z=Fl%Dd?E?P^@_rImn8Ei&*wkTeDevSbIs6TS0xJe3Um8Pa!-0Y2bi6-MU!8m{@N_S>kou! zMuc42zyj;L((f}U^3U*&G+A@RdGY$gBG=lc`D%M0cb}p2q2M=HCs}z=eR}?XTZE`O zPgs71T;C6`|EFApX~Ed(fO;P?8Ez0(R^^ehx4)hH-jt^HdVp;hHG&?!^XcS zKYO(u;;wXVQMvn~(`Iyk$1*zipOqXnWazyJIj8`+0X+{)ZW+Txp40k}+vMW)*`$;&zOXAp?+I37IA@QOwPg=B zUIXj9X483db-SGSm5wWm7NqeOU;(JAHj|jTgk1Pn4j2 zSdV^xo(Bs{lr4&>=>AjqeRyUccIzDffyT>?K3=>}Z+|I%8iMlgy9ck&`)c{BT%Y(_ zcpryEob#{I3`<{7Xb8D}1I`7)xX*4~e^n0hox(U@*x)E5;rBcUavL3-3;u|W`z+>! zy~=^IT?^++I5&Q``?`b`a#Q+!mi#=U66vCgp1(fy`XZ?Xcg1EY8)5w&$@qOlCQTo$ zl<}2%eE;TT+&XG4o^TE*;uP-|Iia95?_YJIXLf^N=id0|mSnN6k`A+(L7Hjje z&1nBq0J&8-exK!5Jo6r$f3yqnZk$V8^SUJMwM_tW$5=Wq4!zAUmDLHkvk1vQ0IeWm|~ zZ9^X)Lhe+A^9@IKIuCq2EeyFYegBj{dV(!wH5wL*#TvZ6qV3V(nS?11Sl|66&Xu+Z zuBOhPynr};J}WN_uBf0a-VV9NFTB2T;QGIbBg`X^TQ8>b`1t;PJh}_eebR8gc}2^) z?Twa*n_tAaO4@g0_M*tmu)fVFoNvkWD}SU+T@1P9BRapPBgmsC*#NmyFV6Mkr59yo ziqJk?P$-5;bgn(UpUb%wfA5l~^OC{zof@1@=>CIr-p&*EHXvCSa&sS?>z7Szk`h-% zd2`jkx#1_z=4hj8v_IQZac+FtNmxbN&>G&yxESXq>jn(@atpUYzVj>2&FmK3Uvk2N z3vv(ozH0uYuGLuRBU&#GvUq)qdBWjWE!OJ5`d&rFe>)Dj zeG1O)RG*id>K;jk+)NGUPOio`FAp9<`?GaE&Yh$D`6eRv`@s4;s&VcT!)DtUd7u(< zrwBT4ZS67R6xs*5fg;Y`F6nrP|K5k@gZV}}AKS1iQHKrfx84tM?iCk#+vGGWTGu`w z==|chVA*#+U%>l&(Z|s{anc|xOxzZ75Bl@YM{CbQ*^64}eZ#sPzt0}~^=C9$f+k>n zyE>fj^7MMaBu04CaY=GPFrrAhsZ9u8J=+J1H6x;6wVJF+Pf$0n-F^LdsNZ+jJ?w4dSf&n z%wOaD@UsAgt{c^HjqFr7OEZ3>+^rHb00N#~_OOOL)!M)P+2 z4V>fODHJ~Rtb!)v%E$mC1B?tXGQh|HBLj>KFfzc%03!p83@|dl$N(b)j0`X`z{mh2 z1B?tXGQh|HBLj>KFfzc%03!p83@|dl$N(b)|GNyx18o)fT8@43DXb4u7v^|irj?_l zeBqc_9ECzncHgrx1N5K)u=H7Cy=QrT)MgFh3X;S`$&WjU5@8(4d0c z5e>eS3?^QGWj`UU%lb}thfg3Q3mI$4Mm}ZyZFEq@(^1pW4qIDoFe_;NxQL8{WaD(u zTbToC(aWbbTw=1u2JRvQot$C9j?5AIaigx~w&;dv4TTt~5H+D^Pmz%gV=&DzuO`lR z-QE%yVzMfC=2G&geFieFLxc4fIYxxXBGa5Kamg29HhX6h|8Yjf4P>y94YT|2T^H8; z8Fo}R^XW<62TrWfdX5YxU$POhaf6t|mFS{->#|CX@+xv@#t>~?fXb|MjECWp`r%(T zeaj531+z_k|KPI(m{_4sfeRs5dwkUrwg(p&sfx$?spP)1My6DUj@$VN*<$6+gP zrDdPx!&$D4N4EUepkOC{2{Cql*#Fk3jkQTI%4}g)+zPbK$vO z_dFS7!3qHrnL&43T2)nSNH6^;@TAwO8loPS`P+v;6@3I!E%@!Bj-ug$SbM# zp!*+A?^{$Xg|ESz&|t?-<`G)uY~;9i_MM+l{#o09PGp&xp;p~OF_g*1n()&FXMU{V zFN&K=FP+sW`>(;IKsMIP7I%CMU-imnW#enX3||h+;L=L{3S+Qxk&U1~XL97P+J!lF zayPUWdI_Nz=r;#gvHlSHkyiLpH_ScYTT|ZUttT(Yf%9Or>>`6%k!<`hoE5Yi6X;dR zzu4XrqWl&ak6^1P(_~{s8{1S;ynVKHVKm>?$_wE9H7y1ipis z)F^TPb2(-XG-FH!#KH>oD!32~&of(lv}&Jn)djpTkxu&;A3>01S{Wr99F2+Ww~S*{ zGINh~Nqk^xMXkb(Zn9BdSF~=qaG;Bc=&}--S&f`twmAx9DDV{_nT6c^P!^$kO9^rt;}H3a=ME`t&L zoss|rDmLp0<002E!KU-1k=@ex3YYbOa1&;5>1c!gV1>0DTnNU^c0c31X`bM927POUR~{Dsl|yngzEZqXrt(X|l0gAW|a7ckAm8^^G+zt7`s1 z2DY<-!is$-^!)bgYPs#kd7I<}=9hiW-pP%OTADy%nxj>r-m|Q~@9u6&x+D7Y=(&c= z$ao12Rta*91DndO?=u*#e2{kL%=!~QypZu48Z0hkqt9Tmf9El2O6}18ap{}C>@kB& zw+o$~<-ks}68b^8aKXL}M4aPa^ zkx>U~g2IfQ5GKSZwY&RqI9km>sqV##*lbO3Hk~%+z{CnQ30w%qSl_pTfXG8zQq9g5 zR{iBYM>G1yVrc?}qD3|yi2oZ|o7ti1|IUz~WjEJfXdJ|{3JNnnxDaBr^O(!c-#+@n zRJ(lniZ?wVtF%@%&;$xaoouA67qFS%!W>Yi7Mp*5#%BZ>V4YxvI>(-v)f;-U{a2fV zdt^_DeTEg-39#|_jh>t=*e*n9)m{;KBd0foWwj>RGpUDvq7nQ(OAA3^-%B<&JARTk z;(b1KYe8A4+Z%C57-JOu#u&#ovaw0c>AHC9jbxvl#Ri7nn_7^8&Y-hnZvuo?ncWqL z=VofRj9prN$7S6uPGl^Ftzx}MHkv%H&M$iCV3#|=7WXCj&kc)LjXmpo>0Pb^oX0?^>xPc~9-S{CZqRX>&&?GSoVdWN>5Kz6Zl0EKmqp2rnD zoZ2p&3ZsFb2h7hXyR8-H?aEX;EdIyYY5`>Ln3e#)l%SA4qLQhACDb%&W8DLNMah3^{+w zpY9L{2-d88>nRJ32|b!XSyM(fsx7K(WUO=^4}4!cs$pddo=MnjpTPE8P?&#$3n4~# zbm(}iJ-f(qx0sv_EB>HdP2gh=<^a*S^ruX!VPB_OqR-GpcD55}UQKvn5kR~da3RFl zv!l(I!#(Vs>A2iBS&g(d)bov4eUK|`MiPt`1s4$w8IPmWUpYg&Kb8GK26)@R3hNx7 z?)Wd=8ebZDas8@UN{NuG3TO?j=V;8C6@W&Fagx{ba3Y6J(JIZ!4m;-!Xv`-9Xdx)f zZe+t#zc=rnSg!OfpHvPxyk$LvVuV10^Bmb&&>3GA#r&g|mqkIf`}9L_Pg<+ukWolB zJ~Sn=U6NkVbAP*hl)(oz@Fs~Flj+c4pCB6@zVp?8>Q{=5)k$iK^H@AV#v^D51d|Pa z^Xtd-u2|}1o7R+zIyiuK(_%D3gKaC>=&jaRFl21Gpy0mQQ$FroP=nSF6odI2*+_4Z zzOv~^3st(-WPaPiBH9}nm+lnUA+W*@<}z_SqQ2j1j&}`z)!49pWT{On*fnV}x@iK1 zC6#Qja`RlzF0lL+a%#m!iQcqmWMFT5ps=KX3t`L?{HDWRr;i$@Ti!VpKD;^$^&HJB z7VzIhgL{XX=Yx61R$YQyFXbnGN6(Lm0W1QD@f}33t&_r!jDyf%O(4fe&>AUBF>kOCEx6EM%o7Aw5G_~Z z&|t438}rub*N2Mmif~Jw`!OZ(h7kGogay3;AWANFLjgMSA3Ppvve=pl` z!+zVLtE-Ul9vVC~WaD5s^SvW7!r>AM|5!A~xphKg0^|%ULfG?=(2p1$rf3I`(~8S} zUVATCtp;{B+6X?R2^7ILvJo-#koq|6(aC7(3Z4VIJd>d@iJl+aPsoPQs~GEBYDu{Y zSJ(0s*Bc&0270Q^$DRs=R^3$hxY^QY{oU~NK$}M%hYmERupI#u&h_9zFmy+(n!-2V ze`yky`Sga+=>lZr&;*Jg$OO>{3eVfIuCeAx&Y0$w)X%Q=$iQYGC<3kELWtp+{p^~i z|JTOgxNNgrNso49_|pUmC;0SDG;FKB*bINVcfL=8U+>{Gr#dpCp~2fvHXM)Sm6Tu7qL}$U!7}O zyXIJBnuX=fmVViAWZ2RK3b#Dj5WJ?l>#ywVfLmi)|JE*&5JiS7GNqi(Bg-QMq$rfMv;Nu`mni7G*TvQm6`J# zl`sBLw$2b)x)K>fSOoC%A#fqYxL0piZ?i|Gthw!db6{U)JTkE7I4D$ia3L6%)Iw|Q zQjckr7yqi|7K<2%#uPSZL1CKXZ&>&q^adByRH^TF=>Pg`HUP{H+Dx1W4Jw%Z#25zc zrfQRqT7HKp@6~47R6C0dE@WIH8|vD2*- zu&UEGW=6D8Tk{F}bT_GV0eb@wf$^$!)0?frZv%uEy$3B2GyG!BWuUO z`)$Mb(iZ=;zPhbW1nmsd=sCzNLN;vVJ)>D)%*=mw?9}#a@275{7@9B!A2-?H6kVbI z;(2mg@>n}{osTHW)igE(u>y8(V$TyJC*6l-gZ(!i9XjZ1^#wf*@PF}x32Pl8SNV6_ z1O){L<1)Yd))##ku|lmf#sYvc$G&UKf2Kiw**3ra*;S6AS2(^R!x9QC;@~?W#-g8P z!|&O&zE{efb>_RfXb>6L6B88XG;kppB0uB4gi)?H^IRO?GxF2%6f&G>0)-h{y#(Vk z^G=pBO8#f@u?g*MGW)@5#b)C4ZfNk#@xFVsYWi)U?E0lu_o2pHtM^d@(O}oaS~c+! z8tjJPJE0$?-9myo&YFeh6PaaMv+L0soT!HeD>vCVZxv+`qL#DUBiQ7Pyv9C96r%|m zOl!zS#(;?I#Pq$*@@E^b`%bTX1&!&m(4Z=jjS;_w{`zlzy>|Q6YF%edHJ~y18XBA+ zCb1t$o8RmTY&sO}qNLt!^^apIGU}kg7C<)cb*`|A-FPj@!O=qes<|8L`D8UTcofM- z(pQ=L5euIGwkXIbj9L{9c7H6plPJ3!U&zMAdHT%HA7#3w%_<5fKYjBQ87RBVi^zs( z3zue)O7dcnQzSsTCy?6d_uQm=x+^~c$xPKSEe^=oe zEC36@0WLAx(V>4 zRMTJkOC3Ner$1f^c%^3Llhc zk+6-VpuQF01$+OFN@dbvL-{Ab@3qrhWG-YXA>7ag@CU7BwDIWm=MZjG4ERHmtA2;y zO$CJ0^ZCCVkx+`x;Rn2`!I?K8#488k2Im2<-v5V%=&311gzFmtUVB-!T3Uqn zHNuVbSNME$n`x9H{k>RTD6xRoD+&0y2hq?D219^1{CT{@zuZ(D@yTBRZ~VAHNJ)q# z9^rc3fVUjO8@?M^tU)-n8t`6TnegO+KW-r0a1iiM71ZyXXEwJY+&~rZ0fA3XN>g9c z5Ke9Yd{FY1Z;&UB9pSnofR6?Rscv;s`-X4|1@P$$@7gqf_9h@)j|TXx!dDj_l8!sV z4gLaruFT@fx2%WT5UxK5_~J)gs<{?}1IncU|D6o9G-tz?US6+0hH6Y?Rlp z@G+{*?Q?TJ=$v@Kaizk>mKAE~{!;e<&LnCvdfDX#&SF5jOxdf2H8 z;d%>zYtFM(g`zg_2Dw3}`i;MNYabrUA03+Vi8z-@U>3yCXV{)KQo8Nlt0 zoGDy6#o-9o_W}H<*;GEiKlL=qy8w6Q_@$u~C`Ul&oB;f|3bCK6Oddx4QoudS{jx9q zp^x_0EdcyvYUIvWOAvi?|$|L;YO^0pYluR4rZ7|IW-V)@Dqn)xs1F9 zeuo8M0aySQfCXRySO6A)1z-VK02Y7+U;$VF7Jvm{0aySQfCXRySO6A)1z-VK02Y7+ zU;$VF7Jvm{0aySQfCXRySO6CIUkk`Dzkq-Fi++~>DaV531Sg*Ub*-DRgJoem*63l4(P)njw=*?l<(HN}Nx%Dj)r_+IxiXKs&>K(N zOb!?~`VV0ZF{M1-5~9@>W|FT{3T~qX));4PmX|FF74Ich%{zG*RALQ^Q`$VWP+8yH z+sUeCrllNf$P%t{Ht(Jlm`c$)y=5sr1Z(v8JwD?5`-r+?dcb_xzN_>*+gI(&;Wi0X zL33Zv_>AJ7Qt?VLtkE6m+&j5=C-c_AXO5?n_&TgX$kx6)ylV`fXZKnzYtLKy^98H6 zLMtS-^I3ju@NNlK<>g&6!WuuCN?yDVe;->l$`P4rrXhtj>eCJOM}78aB^%yiTKAZ6(fHl5Gis2cuVz%G1 z#+fIW;D}hG@`w2OEYtoOmV(twt z^2TbUbHh;qSflLap@)tkdODxQET1#>EXH9C*Za0+B}Y$P+oh(_cI)}2gIJ^UbZn7R zE599WUvh9}Q_pj(L7Pf9mKI-dPs#}hvESM0iZyIg0}5h)-sf<|2k*dVe_P|db(Q=m znH}h&?k3wA*237*gq=Z3zLD-k5-r^vqC9YFtjri|bja2S+eUNB;IlGPuU;biVhyR@ zgGoA)`Zl%o3Q?sGs$;MQZ$>69Lz`Pel{AplG~@9TYc%CH2oIIdjl2zuIyrlXfrK@- z;2lW`Gy2LI>YXuBgq$&~Q7z`bXNSXYkI76m_D6$F^k)WE9b+8V2ybzMgHzLz7=-uKGh;S!`HaNTnHPP-*(%(eXp6g(}`%>diAeThe zdOhPV%eK}SHp3eJ#r{rd);5+xBG)Sgdv63|jdO)!yA{`ep~!YwbxnGXOkxezg@QO6 zsk)IpGFDF8+|QrI8m-$BN2dwiZ>04$dt6d)eup)>&D}l2bI*B|51wt0VjrYGo3v_Q z_-4C`&n{^wwRCNCNQy|NKNYdckQXFrRSULWt5=NfOKf|QiZwWR%3qSSwX7z3%)<4F z{I9SE_qcM1i@-y5=J>g@Dr#!54gMQ4k(O|L|M2m9+cMQ>O*`5;Ai`MEh=6d18%b8sREW zrn10p(d&i9GP+4vW6`ZnrFoJ0nP;D1huMp*WUP^AMa}-LRmXKDx6p>@X{&`b-dqf! ziG9d3FEP$ADUtu)i#1vz3`Yf7SxUQgS}q7w2%W(i6U5{vQIf8_{vTP$<;OO!aW-&W zWR!OtR%PW*5+CoUMz3+zekAuSRF?Z5K238Y(NOvb4Z9Ut>tiS5gzx41`W$cC7kPY* zGdo9vA@Ibg2F2Te^|52a2XE{QkqD|o1haKUU{uq&Z+g`!#TrY zDQg_b1Necc5sB}k_Y$42C$>%%VYgz?wu>asCFLtya^lPd-luo4#)N|SNMu0R->3bI NbmVg_=}+hg{R5{2zJve( literal 0 HcmV?d00001 diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..6374df08aad801186d66a7e51f0b0eb27daaccc9 100644 GIT binary patch literal 17 UcmZQB2>&W}YQ^zW3=m)d06L)s2><{9 literal 0 HcmV?d00001 diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties index e69de29..f55aefe 100644 --- a/.gradle/buildOutputCleanup/cache.properties +++ b/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Mon May 26 13:43:45 KST 2025 +gradle.version=8.13 diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b5e9e76710b3400d59e123cae0318216c401eae9 100644 GIT binary patch literal 18911 zcmeI%K}b_^9Ki9vQfd|{1DPfmm;|Q6sEZy70?X|X3&jqB*&+>8C={_m3d#@_30Y~& z1P>uejKqV8ng&5)CK)Iag2D{Z4m(JxyHrp1`zc)`MdbV7ZGXP|@BiNW{Esi!n8f(s za+s|nVQa_;0R#|0009ILKmY**5I_I{1Q0*~0R#|0009K{ia??DAhF?xNz9Dg7{t{W z<2Ymu>~+;Wu9lwF-0;t?41Ir4HCtd^{?z^{@O;>nQkWyXMEiVaYg&C&#Y0)ATl>aFF#lLAUNK2O?ty-Us{ZqdU-+i*V(SUay;hE@Q*cd zb1rDV-;wuWBI>K|W1DvUHYQT`EPN$C5kLR|1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009JcUf`5<$ph9IA*VU~SJ}wByI424O?UWj JEC1Jj{Q - - - - - - - - - - - - \ No newline at end of file diff --git a/build/classes/java/main/com/example/Application.class b/build/classes/java/main/com/example/Application.class new file mode 100644 index 0000000000000000000000000000000000000000..1ab52284e730996840bf3dfbc42ad4541c8eca3a GIT binary patch literal 820 zcma)4O>fgc5Ph2_b()$cxX@C*xurQ|ZyX3zf(T9qDuTkHr?sV1DME=K;D5`>83oycESUm;B{&nX6PdWpoccYzGKK+`taQ$k>dRORIEtYDFQx z7<<7JV;rB=#zrQA+e$Me!}z*^X)elga?-HOoClj6#_Nz%qn*5Td}{Qm$|@_8TsBIO z*}EqU?WtKvhJLKHd{-5Tv>$yeLlm1-2laaw_ee&h-zWKiNsAw27~O{iLtrc+A{J~#Ep0!qcKf@WvxCyAF8YS%uHaoM8F?&`_6aW-#*`&fB*aI9{|^(GUyOEUv=xIdMWD-TbZ(9 zEy`E6D{JO-!&*{)!*zVsjWjwlIA$P&E`h#h@`W^Q>1>!cUDsC95y-rdc2iZJ2n-Y+ zj+XamOlHxIo(v2F$MK%P#Wqo^ZcUkfAcLlFE;p-H<@?Lwmq2Q*a!=q=`KXqY-3*;G z(1$$p+)%+S#t`T)B-30DJj>Y#Rr?K`)T-T7oo9TxK>!3!8F(Lq0>?_0V+B(J<-$H? zCPcBzw@NDO&r~&-99`|fX?&2uhX&4ISYWtKkvFBUqV!KNyCo%k*SQk}jTS~DEUJxZ zq&%}yVUg#M%iz4g*@JYoYJZm1e{A3rd@7K&{J1RwClaN_L|~f*Mhz4(CXm+66v!vk zVobEw1p^aWD^rg!*0PHRKEowq>?yx#2Rm(Jth#X-Uu1Aax8qBJ+&0xB1rnt&x+*ZZ z)N}%?u2wDITDR4-T@D#$}J`HF25H&x1qe?)ucdY z$ZyuaY;8DXr^mulD=S=?IGnFJr)oEAiUwDXWH7RA*tJkuSX;PXE;9|+*=obpBoAAJ zYR7`au4XFfh)ca?%TWu>`nvK~B(c)CyH#ngO3%{Yv2b9g@KvL=kegS*Q@6G#Jy}{qLt1S{VPBd1ki|4t-4Y=!JzcAH*R&02b+<`R9K&|MR_9AbCq;a2f#%3}q_ zoWsg*+0yrwpMiFyPlp5j#Pg{&r!uGtj3334M?ma@hYh3h-z1H^K5qDRm0vx4e#PsW zPhno4EfnVU>A`1*J~4Qo4Btzk!Eq{I*9Hnx_!?cv;s&OX!c8jO$1yGegMULjNdJM< zZ^*tzZ+JgZe1m~sxR}B%-Xp~!%<$cajKXNZH#;OHe$Ddg6kJA}%56rygSj}WqO%UJ z4Y#5e|HP2MYn*Mpd^EOC>@#8Pfyk7V-=zyW39}H1EVQJ=40RUS4k{v%$vtLL#(bQ~ z8Z$|8y;o!|_y@!vtR!cty>r zFu_H9OBLORX?|%(oyFfVvK#YU0`pERVVR2Ck+fumlKZ@Lk5>8QZz(yk*L7jH>%Mnz z&HurDT#xT|oqq?{-{JeXF-bto-LCr&y7Bez%1?QI*C8xS&=A<$*@WQOs1KG&N$iT?J40J350~62{tPE@nAlI;i MXrK%SNSuKa05pL&B>(^b literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/apiPayload/BaseErrorCode.class b/build/classes/java/main/com/example/apiPayload/BaseErrorCode.class new file mode 100644 index 0000000000000000000000000000000000000000..368856af1acd1b5898443ba870ec4a7df2757d5f GIT binary patch literal 224 zcmZ{e%?`m(5QWbaty&4MV8On}Z~l z5bngTgbR}rdfndQ59`hOXqv%J*Z9^nh!bv;r5 literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/apiPayload/ErrorReasonDTO$ErrorReasonDTOBuilder.class b/build/classes/java/main/com/example/apiPayload/ErrorReasonDTO$ErrorReasonDTOBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..88d6522730b6dcc32379841904d37f847a4fa1b1 GIT binary patch literal 2419 zcmbuB>vGdZ6vzLYn;chdOhSm$lv^9X4i`c1tudDvLNXWvaVDLHPiuKe7Ry?Xv`(8h z;W6k;7&>%@2jHQYp0xzABMqaOe27-NKKnao&;RUE-hX)e4nP%ad5mDx!kCS5OfVE) z@ICH$+~0B5n=gc`876K@U+P;7qowlJByyOvkhk##Y=(-fI*$08cewe7y4%oP_d!Vy6(Q|r+vb;P8#6e`Fy^Y3V3@8So~EG<${p@6ubSxvwd64+mlK&TKI!Ju)n8^n5Kl zV$I)^p=^5MuJ0>SSdv2{h^IPD)pi~TUj$r>R)xf>^~IX1OJ6+hb($jB4tO_8 zTR1g=N**^+wQ$Q6@@ zW8A^2tju7q`E;pj9uGr7bvBy{wQ!$$T_T5Rsj={Y;mqev>FW^Xk-Aonz9hgHJ?YZ` zhD$V?ps_^bi0RmgHR{!gHR{Yq)-2jj-zH*|>CK^EnORwS1NKiJy+lvr2o%C)dK%|u z%N1OuaWD)3}3SpfnxOQ4TQs24ANO5@}mZ)%HjH6tinohNcGQ4fkK19z?&zcfjZ1^C|Fg{M@gP mUxwuPwZB%xZ#3q};qUZ!hYkizQy@9|U!jIc+`|f1G51%nkfIvk>1!;@0YW#+eD85L_Bb1QHx9N5)1N&%px2XTg51QDJ zXyOm>M;Y%-8)%^k-DLOPnZ4)EIrrY(zyE&y0q`78(ug6Rgkd6q5r!q(cP;USyG=(} zyeW72SI6gd>unJD!Jgou@4eaIVMxoc+OlmCh79a5gA~$9WK3jXGE5xvQ*JrjYgjwA zV_`=OBhREKqZbVEV(CDgIc8!U6AYQ7C~8(C9pI@?biiEzH)J7HBxXLb;HDrib}dfls7~Ya}4W4NnGq#{JJHbx(G6u zMVi5Eh-mYo0Ho=VsBCB|;}z+N?Uq{;!9K4!nw)QQ=YR)Nt-G5>bRkM1P zp^9^OwGvl%N(a=WEfF30^U-9hoPY5bU&m!8n{binWB%%AWNf7 zUS54u+S06QOVdbp1XOFx)AJUsEV7JjqWlx=8#yuD?gjxl+#%oW1Ym&}&vg_Cs8(7j08O4AbAG#+4?4phn($f_?ztJQ20(h>k*ggLoyUm>LPn< zGOA#`3bF%g(o2D%jFkb2a+ed0U7P6Pz(muR6OCV!D2`RFVU3!t287XXHid7C13ym literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/apiPayload/ReasonDTO$ReasonDTOBuilder.class b/build/classes/java/main/com/example/apiPayload/ReasonDTO$ReasonDTOBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..cbc47dd12de815e88a4d840e269c689d3842ddb8 GIT binary patch literal 2339 zcmbW2ZBr9T5Xb++(}vtC5mbVBii(=x!}@S~YQzVk5XvZ)p|HePlg$WYHan@^3CcIQ zk8xLprR7!K2e=P)bv@ZN1U4lpUSwys)BWq7?w;O%|NH(AfO#yZF@Qk}LpFvn!jSpM zx47eRf5Ta+eiW`|7+-wzFGkNv|dXhV-V^&5Gu_6*62bt6;+kn}PH>GKTvZbcP{ln&D-xuVB}c{*#jYS{i3?*20X9b2z^z@lnte=@$1|V&wzFrCb*ws!Ji? zC5n$ZP9>eSaS@joCL6piipqDnek=7R?Ly6cO-Xyv4T~-Ni#h3$VfszW*Rmm&{Vf^F zswbZMzM|qva%gJdsYX@Roh9LmfNN1JP@RhHI*pa3FJ848RS~RmGBn!C<=z?(q2~>`QYBiAT&?$4vizaonU_Lus@iLA`c{j8qP&}1KOAeRM^O$(8m^j)#xR>Z z*q$za+N`$(kLK+mA1*LST1Kx}h6ON6b zkj6vITXp=QjsxF+!d(^3m+|?@BX85B!9kF5rEpfl*iEy^8RK3+KBm?e} z>@i&3Zi*i2@4NJS+^iT;#K_amp?{f?%zXv>tBszcr*Q-d;R-#Cb7OK9*J$ky zgHdSLG1vwb2xtPf=B|99$Dgzvz<$)pNF_#*a(p(&I54!#KK>YPB>2-`aHMa3l&6?) zUiQX6ftv|F#eb}Cew6c=Kat>1_U51Hn;+FL=1(U0w{V+MY6`g!*DU)tvhU`0s02Hd zrX4!U4o-ZbK*+wPCw_mtya gTb9LrT2tik0sWrP!GLiJBt@V4B1Z8Hizs30f4S=w^8f$< literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/apiPayload/ReasonDTO.class b/build/classes/java/main/com/example/apiPayload/ReasonDTO.class new file mode 100644 index 0000000000000000000000000000000000000000..fdfbd6117c37e1ae2276f04b175e989b8b7d435d GIT binary patch literal 1386 zcma)6YflqF6g|^!>1%nkfIvk>1Zj(~V)PSgq8OE=JVFVHe4B2^GO&+kcZ>R;{Gf>q zi6;I4f0Xggv?-O6ludT;o!NWOoOAEp{qy(dZvZdwB#jv2Nf;&)7-3kjeb*A7x!ZJv z#hY@Ue{pe%N0LpSYb1eUgKlHUGd2e&MXySz3+u> zs`R{xNlY;qwqF+v`O4*y)kvl5s9PpxR8-O>qP!uJm}A%&rf#XH^L0x)brEDRi!_7T z5YhIfY*KPe1hzDR@rv}sZp*ES;E>lGP06>pbHoFw*4<4bI+3Jvu`-OqCc{qgM%6eT zls>pqI-;)Zi0H(x?{ihyNCd>=_Cd>wq${?)a~Vpa`O5Qr>V@<@dYi8}zFYIptari_ z0gptTSS4$nnlL;omWIk0C?z3`QW-D1$*@8=H)%VaO_`l?Pf^Z5$7z@-V5ie+T2%d3 zV2ig>bz`j8({+`{klhs_#j1vpRCC)SiCYd2LqW@lUUYW?aGz!_MIVbnmgbhcy!uwO zr9sq|Mvd$UsIHi&=N(#EWEt5+`3Klna$>mK4FYnwN50t!zyckjt}GT2*U1h=CupZo zzCg0P+Qw*kz71AhYa>^lGuoK`PH+1WQyTGUC##28(3BO8f+ii)o}wMso+57G0r@#Y zhbBnjB;7M~FVVKrv`jXQhghKlm9ho0>Pr2>?1u{!zLC%R#HIerWGJH4&Frtqs7mWs zkiDiR{S+9=SiJ@)cNJ)CDA1#8fu^qljSm5eV@+#Vr)H}GVf43nOkPHNF>E0H4^$Eq A=l}o! literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/apiPayload/code/status/ErrorStatus.class b/build/classes/java/main/com/example/apiPayload/code/status/ErrorStatus.class new file mode 100644 index 0000000000000000000000000000000000000000..e0472237ea81c8e5ae5b7ea6546650b2a55157a7 GIT binary patch literal 4218 zcmbtY{aaJ_75`iy=EbYTi&#;osl^FY3DmcCP~|OX){tNlsMxLPC0rmH5|#wp?yaoD z&VsCV)73elFSB-bbfXavYuowrp8dA}f?WQEJv--n(+~un;v>(KdveeBdtN^0d%owK z@bCY9^(}xG@z9I{3Dx2FfKz)z9T<#iPIWNSuD%(Kt3A$eyhn2;Q)+4`>2xI$@kBs; zw?aaZ3==j;*cNhogD$_f(Gv=|{GBd;$mRF@{1R$BkEgVbwOV9YS*sjsYHSJlU8g%- zfgmqzlp*uNrcj5su_JiO=XalVweZSj8O6L}3$^e(aF3lb5$N z`h)IfkFlB){(+3$y!uqD&({)aZVb9k`uttX4LD>x&3lRiL7)E-`DbL5W1j?bd1s@C zpi8KI<#EGk!+unlu}?-Nsw9}g(RfUgu(hJnb56aWI-_c=&*|$vr-f5>HXOh~Gpc1c zQA4p>+Te-}4Uiuf)aa1r>y>b%B2T(GswR_ld5l0R5sCHHNY$#|?K=p(b;Ly>5YmXL6Qyk3`3`Engih60gO&&zlLKO(IIS~98jQ7n{| zuG>(L7tJ`%drwHHdjg{pPUi(gDR4B(Xkr{id@I@C7G|8_Z>=&;;*IhKjRK7CTn_V;L{OLs=wFL_+0y&qH|ZmEl7>UCsVfYS1Vhlmwo5qR*KeVZKKSoho8mi4)j#4OXNw>9zchTPP{B(LwzI`Ngb!+w#q@eD?2SP zS#cJxnDG-CKV^i^tOJvT(p5{P1tB`QW?x&I&wHe%#sXEsA${a#COzWNKe&?laO!|# zVP-gUdrF_YLX3sgg}^$%|R9Es$ALT*e@4 zlJm>E1ylmEkvUvbYe9-tP0Z`JC-jLK$KtgS(zbZ*PEJ)Zt9o6=8?4Hj>jxJ6JWtOd z3w}v@7UnPMpAE0>l48MI)Qq@w5Ck&(8wn+3a^cJA%;;6e;>FAQ=&i-kc?(J{7@-6= zI*GCO9d`2VDgDMBIsc1OPw~%oBg26|GP?9-eeCAK{4fXV5eIf#@FzmYJ<1TcF5&3n zwVBM=eTP0lauW{y{tSU!xcd=hUFOrT9s2aQ`UIsT`?MU*(-!=N&=}3kP&YvhkZ_X= zE6{U}ekkK3e9TQwbQdaBhbk%`yUm&LR|(~7)YK+5sfmWrOr?_U^LK`djQ3(sB&KZghx0b}R zbfO5^0`Z|lSZj@N>e%xJ<7ytDsED~^6izWEX%ywsRcDiiTDl7d=<^9SH_1GDC2WdRHIHW>LgM`e%l7|` zIC56@j_~1g;+Q1d8D`aghlieQ{N=2&vU${2&EVJ^>WDPVp}BAlt~t1ubng(@4uU3D zY$ksc)X*efO9T5sEZHl=l-MWXi=2_}tP#hmM#x^<98NE@wVSK}N9lQtY&}o5UO*Y) z*o8XmA^ws*N6y|q@K3VCpqvDbBV=OLO8|^u?#~l8WrcYUuYO5XLK=5hQPl9LqKfZT zG_$IrV~;AT{2oOGJXN4bKzj{^BD~wHp51j1!K#C^XsaqKnngoZnQ0cs7(sq2Y!tey zNE&od#?kOMPS8TZ;}kVkIY~|6L@704)(*_k#|Jyjxps=b9ruLtc`$%%xa>AiJE5R) z++P)nfL6Qh8%SM+X%q&!iqbF#x=d-hw_O|3*c9k8r(q9tS<)y8blHiujR^6|h!ArZ z5o;QI0&HdZEwJD|zA|h{B_czB|2`l~${DiNrM#-Vb`RZmQ7CvCS?*OL%6Y*v3*G?v z5mSDqBn8hVcthmE1?5fU7lOA*@P0-9^eVqrh6T?qcyE()y~=Nui-K1oc)w%+dzDMd zs91J;2u_SAcK8|7YN~Ur)aU I{{`#+0r_Nol>h($ literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/apiPayload/code/status/SuccessStatus.class b/build/classes/java/main/com/example/apiPayload/code/status/SuccessStatus.class new file mode 100644 index 0000000000000000000000000000000000000000..3e77e1f80dcbc658aff89fc14cb992a1d54e06c1 GIT binary patch literal 2910 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 AO#lD@ literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/apiPayload/exception/GeneralException.class b/build/classes/java/main/com/example/apiPayload/exception/GeneralException.class new file mode 100644 index 0000000000000000000000000000000000000000..8ff15c12739c2387087da2c2410202afa18100e6 GIT binary patch literal 1009 zcma)4+iuf95IvKdiEElPp{2Ck3Z+VdgoWU(P>D;qNTF11)%T6FYPZTgd(N55_a9%s0eFa8b(BzcQ1MVjjc_;6kuTqhXcS6cjMT1p z7iux&P#{M}>DYfRW0{C>`&WQa3G`4BHu?pBAB$9OCy7p;aNgz|&Y|wW^)LsIu>L=v z2=yar_M}L4Oz3vHMN}EhB=70L>x^sOL&Flaeil@oC) z{7}S4{@yq?Dw0!G)*h%>nJq%O(>)~2Gu#v#cfnRiX!KPqcgE2`CI?~=a-`MQfd~&p zqO6|>E9O|GgnLDW6!&|RusqBCryhdCPZJ@X;x5e&gs_@d`!YUNsbZ0j;#hNoc-*Y9 z)em(v&~Ng|8#!bN-A9}tB9cZXjOp&{aT3U9$~I{6>`L9SbHEyJ z<^nG%vE|+5TZQjS@c6vQ-hH;j*6n=+eSt%G&t3`3eAcp;1}^d4=5rQSu*#Njxd`F> z-w5r0B3!{$=CK-l#EtKlrYH}$!i(_iCcEABd5;;malIRn~az!JyY-e)v>w?BbC hus2;yJwscXWaVhKEZZ8w4bH9-J59_|+{|Fse*$@*<_Q1* literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/apiPayload/exception/handler/FoodCategoryHandler.class b/build/classes/java/main/com/example/apiPayload/exception/handler/FoodCategoryHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..50449e7ad69eb21203b414ffbfdf67c68fbe277e GIT binary patch literal 599 zcma)4O-}+b5Pd}!6j1OZ#;Z5c#MO8NIY>YcXh<;Jhuw+P>~2Z782MSAOg#7l{87eP z(0FkZ+obd6W!m>T?Z@ZaJAg~! z;$L&ZmZIJdp-^h;M7xec^JtK>{fbiVS!-<9gxqS5%UD-v=M?{HO(_W@wtnB3uuF~~ zj9uKUIE9N`wLnDt)RCK~{!(?c#G5lr;N6QD1s6fQL~~H09-;&cxp#IOGP1j~Og5sQoyS#E3^ zTuCa9jCoaZud&bkX5Nv}JpVU=)PVE(B!<1~uJ1!GCF>m??X zeGWovXi~XdBvWx?p2n(lhBoAQ!p?a9C6@D(%{(7tph!5*ix) i+Mte#qBTX^OBb40SEhb!prx7GiYuhVC*IUpLgy1k-iO8j literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/config/QueryDSLConfig.class b/build/classes/java/main/com/example/config/QueryDSLConfig.class new file mode 100644 index 0000000000000000000000000000000000000000..4368f766579c62f0170b76d7a424d7db7b08b377 GIT binary patch literal 866 zcma))UvJYe6vdC*u4SRy!Ulu!znX^HBJkT@3X{fQ2$aEKs1lEE>UC}tyEyJxzZFQJ zNg(k7_)v)Jv>HP~qA#(Jef+cU$^H53+YbPbQLCW9uo0V-e;7$S?q&(^4+U50FySxv zx8L~1T@gED$MYy*u7YwE6I>Cq1W-4=1$C5ugZ)yc#2&%YrP+Bj-gm@v>BGD#`C2yH0q6LrW9HXr5)3i1c{WEuSRJ{+IOOp(8_XTVv)3k zRbEdQOYTTzzV!d*Md-D+BMKvxZIvlPY-??taLQ;RJcx|#@oZ?7?j2f@%8$kleDY47 zI4;ht{D~BrSmB;@N2a?kyw_3Q3^%6u7y9@g7c57KNjql1pGz&RaI#C3;J}P*EO(VJ zaOLkG{LtsiusQ3)CT%eyG*#3>jT&l^+K__tEk(0JK3}2nGO0}zNdwjIVDFn>P&~!_ zr`&agzU6!`#Hx2pe7K5hq}Hap*J)(Fk%;4YTf{BU7&K3@(7gW@#m}S)_(KbF+UmqL grI9~>9i>O^IYuJHO`7@#+{yvB^Y5Lri|+!z0dFbXCjbBd literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/config/SwaggerConfig.class b/build/classes/java/main/com/example/config/SwaggerConfig.class new file mode 100644 index 0000000000000000000000000000000000000000..1359c178fbb4d69180b8c573c471edc15af0ebbd GIT binary patch literal 2708 zcmbtWZC4XV6n=&T65{&OMN7fA2mwJci&fDYutG{oAOuSyXl-pb$q*Kj-7vcW`ELJ3 ze?dRB{jl~l=ky2kuhier(>t38@z9OXlEci-%$@uC+#F*4Bd|5R5-(fvCN_T zoFfdgoEXo1SXv^Cj~K4`NQ(aT(+_W7|MvFvk5Xozg7Z@5sS>w~!l*fhWrp!FDRDbK z8K0CSpC}lRBq7q-_Kq(y^e(RFqxqGk`D_T68SeRNW%FWP7|yUr@#%@&-DD8U@7GA1;6gtCgyFtF zhN0uD-TC-1lO{#wBc ze8X_I4F^p-UUU$11e$Ht?6{I&D) zLA``JkL}b;`-ESH*w`_YCNlp#JB%&E>8(AdnXXx{zN$wPmZ9%mnA)OqvZ~j1kqjE~ z*R3r!3;&tJvLaddvX>yUQ=(f#Cv!Lt^)PHq)`^dj8 zQ1?d4!TwKjIFihVg6Ag^gJVtxtzv7mQJL-KGpQ+O>9=Vu( z7;Ipk&cAG6fu==u$;GmZuWq_{O2p3xf-b)OnWT0>YPtxOMiss2BYn@)cme(N8>Cmw zC@x|Omobein8j735Jj5aBUudLB{d6<7}+uclPGs+Pg;AoX;I7CeySqt*dnV3@eJFj ukknCRP^CKo;uE7>x5x`Mx+#6OLvsLv#xB?gyAG}E^dBLLINjfUJn#>LBNM#< literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/converter/MemberConverter.class b/build/classes/java/main/com/example/converter/MemberConverter.class new file mode 100644 index 0000000000000000000000000000000000000000..29e5020e9d974a68ebc56a988959bb36cbdd681c GIT binary patch literal 2742 zcmb_e>sAw26#fng83>1a#0$j>jgo+pR;^kiw2@0dhd_bS(o%Jj9K&ETgEJG*-rJYy zTK(1XBeL4H`T%{0zDZYC_nAy2Go_*~Va=TElYRF7_O~x5fBy5^9{?usV-zh2DF}14 zBErzKrR`{`vSyT0i}@{4a2O)DbVGM08A6HVS`=+)R}kgs0B5*TFe@qXM5}Cu*5U8A15faU39G^=xVS_dle8JG~mQmHw%c+cI zX-`$%cB0roNUA^J(2%E@U7ssUmUt*Eslkx;NOMoht@Nv)%c3Z|PB09;s4~(DN(|?l zb6PNs9bq}b@+R$6L#Cjn%pzIrR&_(2s&jnr7)z_BO-LrcOmQ;$!`P zt*6PZV+L-SO-&y%UkQ?0&w_9^&Ek?~Q6`BF3Z>04>%JN8 z`jG{_2ggqUY|xit3HJoUxDV5jW*ItH9IfzZLEH9NkFJu jb>C0$l-6OQtPNk{YhoitpT40rfp76Wtyv=Q2ekhSn1=Ni literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/converter/MemberPreferConverter.class b/build/classes/java/main/com/example/converter/MemberPreferConverter.class new file mode 100644 index 0000000000000000000000000000000000000000..9a427ab55b774ccfc97e262b52deb89070e81510 GIT binary patch literal 2297 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 O_C90#U!22vEc*&^=c(HO literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/converter/TempConverter.class b/build/classes/java/main/com/example/converter/TempConverter.class new file mode 100644 index 0000000000000000000000000000000000000000..d371a9a547b9d98d9e3d5bc85e3f997b2391b8d6 GIT binary patch literal 1600 zcmb_cTXWJ-5dOA6Lqlkhs;%_`^rE!Zrd8{WYDZB=W~g;6_Sq1QZ8{-glC<_`=?ivz z@CW##9QOp!;K&TMGO%ZN$+wqpv*-JduipSX#)gU!#1zCeBrr?zFj{M zWl)_$}A*#k@3X z!VjL;wh2o8(6SrCBb1Aa)ze_3ah`R8l#&=Hq-*<@pXaYkQc#h>IR#k_lQ>VFjODnlEaY!ZaZf5=2-%B|Rk-Gq|kaik!<;!rD-czc@BU zE3jNA9M0CTIis*}E>TBsI4W|;D=27~#T=n>>VgJECd5D322bOCbQ%>W5PQNKb{x@) z2PI-ob6AjrxlUOB7jjApiiEjn>!#}*2`>;{xFzMD#Z8snh9FE-El0dQY}SQWGwL>b zvQ^hK>|MjNq}_GK1AglX3w=8@Aa;qDByjuoFx#=CED&D(Cq6mfWMofzli|B%O9cCF zdUyr z))-bW%^nF}?S|A&pk&i+Otf*~6Z|l8QzM#`xE^w}FN0ExFqg`6hl0 zO)w;w_yPP-#@XHxuFwD>O>b|fv%i^nc4zzd-{~I!ODLoeLrVg!X~faSklEvh+;X_P zV|^&^iHc@udm~+`-!io1^4sl5qCJ6B8h4Opn60R)CBE_Mfg>ziRk?Jn6{YMV*J4L` zN8{1Sa!oq6@EBs!rbwmpP$lK=6b!mEjV@#uT3uch4B3d!ruHOxC6Hwpz9wu6-RLzH z-DQ}_MIiM+k$DKsZ)Zu3{xt4kfT6$2_eD{;6|O%^y-RPt=C1Y`=5NBfjAt19RCBeg zigou;`m*eZcdn~6*OJ(#Oh;AAYTsHFuJA}YyFd~Yl}!?Km82^+YSpsvwm2;`-m1c# zZSF}k4~?yQR}yKibd562HiUw$UMehqOH$^&(7Ve1$UWLYEj&tUJqkZl{FeB5*&HH< zvD~!@Qdvo@f_MzQwBY=}g;_A9HdW25h!ts+?T((-8RJce4dLrG9QmL2lQsqugq8`Pr!cGmpr7W0f2x*^fXYjWEdkfM)8b1M$u9S73wJf ziOH#7^!P!pFlT9HZj|J5j&d@uzqYMB5 literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/domain/FoodCategory.class b/build/classes/java/main/com/example/domain/FoodCategory.class new file mode 100644 index 0000000000000000000000000000000000000000..a4e349d70e95ea49f2a55776e4831b10191c8f10 GIT binary patch literal 1424 zcmah}VNVl55PjR0mX;#4pn{-)g0=-Y6%#+8CW2y`l*UNY1ix*2o3e7ZOYXKr{*@*Y z5>5O8{wU+@aWO}&woSV`v$JpJ-kZ6fzrOtd@B&YBNHJ`6weN^e+&}Sz<7%HvC?m}o z!~FX`?R?Req3n3#l~USpBee<{<_Q0o2ZlQ*A_!$@gz5^X?rszM(4)6PiGVnA+uZ95 z3L6iNwR@E4zc(mf>+B@DQGflW*{Zh=85W1;*wtR&R~B3KJ&#k(X;O~J&w4`j%#pRG z7;>FUSs0#Gs*NFBBqbcCCuPX&YL{r9YDguTeZM1umd(eo5R+C{r$cBfH$3fk^s)1Y z4#FDi2~#Is%T&#PvQ|jligiUT zvg`3M6lBgM@!~muh>z`hi#!V-u!!4r z+@VR#V+qUTTcK-qwV(0tV22k-f2KXdUHZ?`3QBY@-mgX{Yq%fZbm-hhjMcs(XRoCa z*GhOm9$O;?pn@u`SAl9+9|ANv2sAqaC}ZC&e*s;f^ktx;;s_vWMQk7)k+M&K(Y(|M zsJ4ENTy5hVlY@|x5#;h^X#9{gWU)AQXLU&7A(fK1noUQJBo7&EMs+%omX`8IWIv`~ RCZhKV?d%(r#u{75{{|G0HTD1i literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/domain/Member$MemberBuilder.class b/build/classes/java/main/com/example/domain/Member$MemberBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..73dac0a1e15e9f32af6550b7adfeb3834cbcea8f GIT binary patch literal 5653 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 literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/domain/Mission$MissionBuilder.class b/build/classes/java/main/com/example/domain/Mission$MissionBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..d85f5bdade5ab9dd957fadee2cc521546284bf8c GIT binary patch literal 3520 zcmbtW>rxy=6#ja-ENmv>7C?f8AWPhZ$as&skPAdExA?fvpXZjmOpxX`t0fNT>3lR=kI@B{RLnZ-{+7)PZqrf`q0lX z{FI+^)8_7xxp(+fR6~aT70b24TMRvg;=v#WFqlQozy%l##j59+;wSFZZDH0thg+_> zV+Dcbxp_UWH7vU(e1?owBm8p9K-qJTN)qsrfguc&C13o=ebO3>X>GfqI1+xOIBH-F zml+0Xg4b-z6%6A_HMAUImc1&s@9|JX$`b}A@dm>MM>$lfiz>rt47w8fmUiKafoZ(S z&=-WBPq0_YDUns=e-ZXo1GBisFyaX3Q2093vK3Iibcl`6vP~(8HoRqE9(f8;ZD5#A zGq4k(m9n@_9;7&+?c}h4f;_My!!LzcKv70x>t^m!a}?9liAZxv#jJE&A*E?*=Zgn9 zEa65L?-*Ey*+wa4har2)?S|OBR>6{-lTuIJt_tXlkLtET+T`%MzRS0=JTDCps z&^s|Vg)4kwZmq;HSh0>=9yTNoS2{Akl9qXg*Xu-NQ=Nb&N$D0r^{#t0LK!Mkt?V`= zRrfjhAPvh}IpDq}*IL*c9$VzpQko5o+ELYHVl|QUVpsczcSLyX)$VhjJ0cW5IdCTq z+2n9{sB0Rc<6h_v*$Tn zcPD(H3XPq9X3+9Vau7jkL(-&K;RzzP2-;h-?#E z6p<`}T?|GH&;N;q$BWO2yw7ow#t4mZ8dEf8Xw1F9+v&7cq2*I6WE)>-JCBI&vXYhw z>$Q!SSfpiSMt#nxX^y5>co#U!;&O_`K72_wGAOs@b0?B5P^_TKiD8e%*LX;)QPLft Pmj4lD;W3`zJ52oxJl;Oh literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/domain/Mission.class b/build/classes/java/main/com/example/domain/Mission.class new file mode 100644 index 0000000000000000000000000000000000000000..3f169984435daf463d6fe1d0a6af77268199bd49 GIT binary patch literal 3167 zcmc&%Yf~Fl7=8{U1k#jSfi_U2*c+tK^^O&aa%)Wuv_eE_)p|&dbZvH*+1*t68~zfV zG1D14(;2_|qa2^Jd&q=!Tc)36W;wU_ect=~!r%Y=`4Yfw)N<$&n5}t^rGAmlVMAGU z&ylukZQ4O#d+rspt~TvPUHN$kWD3ZlN1$iPcI|LkpnGO^w-3GO%OPLD859J@UyUfx zW!D7;D?iC+(rQTez^Zue!J|Y7chZ~0@)z+e8P@b zQcT&=ZxQxe1x(?Rz>uSyedQZ(RqP;ao7fEPhNW*JhPMm2j4L!TW)PT26R;VfE#`3z znH;VQTuIS_SB~det1?g*JwH} zF*B}o7-MSAcs|x?*|%dKxH4?&&@T~yDcX+TQd*=Od3ea&vEqoC_%ALKJl!N3Q}wi6 z+GCno)mQ1UoXJh@YBH$FI^|EN8n6~W8(X_qDivxSCsSlWZa*$nf%%!)G>wgpiOSaA zSo5^lfePzstEtnuDw!rsQIj`i_gPBj3|AVSv+q5%+8IHt?12i)^ye^jNEEs*Jzbx> z(zi9f5t0d?*v!L=uThz}eZ<{1&0+Ke_Hlb)os(w0-51UuQzbfsKtJh>Gvbyoa!eX^ zCDRlbCelR}PwhyNQi*Xt5E#*j|7`?qC$v+EmMk9&YhS)$erZ?4!UQJM^@^Vj4tcc$V%oMni)oZbrP*D9v6E@Qo?ud8a8rd(y!r#_vphq#BY~Iy zhXHRCkW-A!?|4nWrta9fpb94KZtBv|IiJ>hi8MV?D7$RDYYiC$ipPEf zWd<~+IYzH>wsWxSQOtRLgQp>$=D5!Dd{e=~JG|hi;oV|@CER`lp|FfkdBJh_TDZ@UM;}(OO4>C7 zYGD1-`vPL`Il6!2USOTSd$@wiZkYX@=;baxH=GvVHAS}c2XdONtAlLO#eolOEwo(i;u`zb&}Nua4yfga$?6rj;0(DbQ5+t^6~Dkg!ho(fdOSLlwy z)amTWB+yI>P@F8g38#OJZ&EayP6E!Q0Cq+%qyHu~K+DunM|rUH99K&(FvBb=wJ`ZR z@8XQea|K3`!SxQ@!PKnCVvlq>G5;cNFV}?xZs|q~xzbzkB@n$kd=)nl|9M|*wCiqS9yUZ^R)3+zWl)-mo?85g^ ZrRy?$%<~WYGTaMD?)1L~oR!!|-@i~B*%kl* literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/domain/QFoodCategory.class b/build/classes/java/main/com/example/domain/QFoodCategory.class new file mode 100644 index 0000000000000000000000000000000000000000..f3b91bd0886784f9486ae7c907c967cbecd2d018 GIT binary patch literal 2609 zcmbuBeN!7%6vm$$UJ}AmXdoyBDYT^|o3^VKt&;Fk0$6HVKxhPCT9;%S)=748v+2lp zaK``q3jXOhmeSf8KY$-feeP}u2~8q14Kr-+-h0paopYXhZvOt~&%Xf7!3ZKCa5-m} zG~-9TbWk+3yj{{wOIx+=d|G#ng6$lJ(TT1gx)lTw5=hA9KU56oFkdceIomNb_wc|d zYa6<||G;qdyzc6&dd}rmf!?RKlhqwl-zypdv$4$g`ZHZC>Q+J9avjquB;%R$7)*u{ zMsE;`f<9ajP+M)1P%D;ex`&cyNiWlFcgnO(cm9n3bWtytljrju&jv9dFx4bgd{we7 zZBx4P9f#46h~yj;n2fb`kc?-05XEp1?T()hN44Froh+;H^34wr_58{fzh0{uAY^xCF zf@=zX{8f+SJ` zV^S8aPMtuoV7S{ng#v@I_#3&Ew&oQqV37xsD^E@-Nx8b6<&%}k5SEy)rwwf(ie;(t z6@h58%z4WGOu-WF30!F=)dpQB1qR9nJ4G>TIAzne9<414i2DM4Y1=Bhy5(l|V#VnC zm!Dr2ev4AeTV}!1-HOAwS6aq#R?8_rKQ5)MW$c_@JP~?wo(!{X?VRecYQ^hhQvcrO z&a|B;OMk|+41eji-}oY)qmxEhec9>mn`ME}vs!!r3kQweYSOk=5ULSD2ht&gAde=aNWtU$cIotg&a+7MIV z-7o^z+s07a#XYH9v3db?#H5k+mOG_Z8gGx(xl$3{vMWx`ST*G>7irM-E!ihA$uk}1 zr5nU0tl>TcKIbTa3`XPu;rENO|9emNY0f|N=GXb2t*$oS;FvweTgSFhd%w<0nkNM- zw7JRIpE(ZjnN}kr@e&=!=uuyze^))m#Ul)<>T?V|$E72Tt7_zOWby^B9$}i_)fc#N zg!iipZXe;}-#w5o_rxI@GxT*DS;hkdu$_JSe+9wAG#FFDsG zIDp4Fhz^hQ*DB|lns|jf{B`jPa{_Nk+ksQsX$+8QjI`6Fy-nIV(%wU?j&`j^yM`U? z67VZxDtv;)+QHYS{5yQ*SLPcpj&G~^{;3+rqRjVO;s@&R6HNIq28lmTe3ke!#9zRT zI{d{N{vsaZ$tmn(!iMl2biR_Jm}1i9r|&hQyOF!cNdJLVSzh6J?B){~Vnlv~d&qGd GK>k1a%Cc4f literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/domain/QMember.class b/build/classes/java/main/com/example/domain/QMember.class new file mode 100644 index 0000000000000000000000000000000000000000..998e9a9bb8a3e061174370dc52e05cf43ffa2225 GIT binary patch literal 5603 zcmds5>vvSu75|+CxRY=(co8Uw4-_$(C<9cfG7*hQpuq%z#I*QmdYQQlm(JW7?!6O9 zskN3q#A+YX+Lx`ZwXJ=u`hW={K5DJn+SgiLtDm~cYQK~}px@j6&N+8(#xOHUE1%4V z%su<=vmd{`&))moxBva(D*$f79}Tn!tjH7#Dd&(~DCM10wpg%TFE#8G_Bwt$=3%~p z1ttt61iB^T!Ls8|W`lexQ}mrwI9YOn)J{9xKkS5d)(-8hb|x(PlL8C(75y>WckR7- zM__a3&;fhGPUUScml_Fu*UP25hUOwL-HvuFG+>%ogbM_cjW$W62E5P>C#5~N+5y!r z=y5$a+%iLdU)~Oa^xU*}jTu-ha8(_UNGcS))Gnz?D{e;zENSNwfz_Q&6{Ney+OQPM z3@kVCKCBQ}Sx3b#9SAxy9+XRtFL1SzIwM@?T9QuSVgbX>W_>3J+NtRh6PMyL0W;$} zcIfCB2=x3C{H)LQN;w1(2)8Z8u+*SvenjF?S)HsE8HkJ#qz1N$#7MldtHg!|#R$CIdL7>IW8rUpw!SvY~Dtb9- zbC1ab%*2kuxuYx(tibTQw_1ye?Y_mt4d|UMzBQW?=%ZP#$3oyvI5KVq1_YKUA3}yO zHB`*ldHF&*vdzQ?F&Kj{$>#-pDJXX0HWPgqnhpGTO9DFtItr=?_U3%Y8FGWrz)lLN zlTHP@RAN1gil*W>u$xD<32$_;6>}R#afg916Cc8dqf%3^%*vFK9u2aj1w7pSgS!X% zMmJV#!mL|ZNtfbI6L;b67;fp9z>&FR%{j^6G?8ONo0NI!kTf6;(??9~!1!!oinkuSOsg(_l~r6y;>#&`m*z+$a^r|;}@e69Rr z%_Fas>kS52Xqs6X>DJs*bdyhY6^nuU8?-0=UJ8D|#9?XJ5eg298Q0E_ayBsV zS%E9-fU8UJNX#fjeBQ(nY)arLhlil#WO{Y;lCQpC;;3}-5f=9#w8L^>;7j$pvX-n- z9#O1Pz*kH>f=zAg&&N!BRkfaSDa#VU)+65^TZpgY8wS2<;#>H(z$$5Ty%QyKm1i&K zgwj8jwa%_{4u+KV9TVTh6ZC|f)!B%#CU-N*RZh0=?^BCTt_||s{y>fuPYEoob5!*x z@goyI#?u5y@1hS%)r?Ug%BVC`H*h$e<;NUf9-KP{`vt^yfkk~qj}Uv|n4K>>^Z&!Y z*AJ}!7kl-HoAU_0Pp=0WdNH$C_h@w9S@&flPj8_OgH7dBn_*8qM|7NZ6IZe}Hqxnq4{G236v z?zDaOsgPBMEvuxe=cNrDP?LbbvUjRwp^a4Q1JtN4_jD`4GtQ0nR{42z<4cOvJj?#B zF%AmNCB*ex@+RoEx)V1WXr$hF7x(mJ^3j#GwNnb2twPq`ck7my8u!~rie*3JY<1<0 z+>GkTIyom`HCs$OKME|tO8f*rg}~3aYQfL3LUt8CUnp;>>X+9&^~)O^`F^4Jp5c35 zzZ9LAXI~>*u)UBp$Dy=b9s5ygtq~XRCO9f@=;u@w&n_haIJdgG@}HBAxR` zygtb_hlzOo0@s`%)IJUZG5r+j90%g{GyLSi9*C#t`-_0M2MhQF{3B_J?ibK{5^c%T z=-88_f(kB5CaslISXII0$>a%KbOKjaa5agYikRfnHP*T*tgqlYK7YWvaSG`QZszl? zR{s>XRwuN75(^|Q(DQ+SMDo=)L$f%i1_tu@%+g2lvs z6|rB-{~L&Xn%Hk6_9Mi8oYWGre}LFOO6(se_D>W0Q^fuaV*e*%|5sxFPeyAR`?E3j zXYm?-MYvxl=q7&wN%{43G+rY~pXxVMRNjov!ktl6&d9Uyo(@LsLFnhl&*jX_6}W`K z=wvW9G8kJJjO`4@7=w``^$>$`l)*U0U_8NKJWH;Z7>qX=j6X9Nf5SjcFwVrmID@zF zn`!9ZBJ>HKp0`P2`Qb;hR{jSToyO8V*7r{0$>aE;JgP#a%L4v_mAfU1*YEIqu3PYj F{{q28Y%~A> literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/domain/QMission.class b/build/classes/java/main/com/example/domain/QMission.class new file mode 100644 index 0000000000000000000000000000000000000000..929a5fdf3187c12f91d14d98425f0ee09c5c6a3d GIT binary patch literal 4830 zcmb_g3wspR8Gg@Z!|W~-gpFW>glYxMZU~EbDYDTbA<;mRCML#Wt9IBOH=}!Fb`ps# zt(9uM*Sl@47Ht(3TjjC|n6^K_A0>Uync2y1+@0ikDm)K6=R4o|F7J0a-{G5Yzy2?P zyYL?kA%U%#QXyrYGz#UsnaY+5hE+_BT9t}bD#j2-yM}c-G(-e?CFhA*)1J>(@~KS8 zHdD@g*{r0-4QFQ5bd0Rw7(+(JDcSP^>mMuG(}rys$MdGZfu51ajX5KgH;TE`q+?sf zTskqb7J=y~Vpy+1*U^Cu0@pXOcfvDRpnZ63cxqDM=9aRh?b6`kqUBW5F$&+PV-w;6 z>-sIy?iMiWjUC7vl}fs$xO(4Pb2TbWOs~ha*sNiTj_dFPfo(xR2xvLenIh5xojr*< z99`3-tgSk($2Nja&RQe{ddM9lxyDHpw&RByZqRWfek8E7)u9GA2pF{um282zp0(*| z$<-h@ATb*GWbk&#;O!I`|DH{lj^So()X*c441!~@=vdCY%z{Hk#nh1W;9F5q6j3M@ zQxlTOJrY9#yQT4c0yhR5pH586B1q}ji(3f$qm|jRN!Z;aUsV$;D1lpb+=kl)q8ZyX z95Z{5L&pN+ahPmVR>73MsUo~Jg8c%KtZ8KPR*}9QU_z>@cF2|*DP@ejJS4-?ud~6h zlwz(rNftO-Usqle_)a>vPFWdzDabeIppN~xM_|{geyAf634a@Clq*TmF zoA1?eABF{V*XFU=!f}c6=>KoEE6TU~sEz@Qus#Frt~(ULn82ojDGl;k-H26jG>lV- z%+3`#P%z46cG%Qt{Rs{C3nT)#CmPtJ>p$T@6rHqkMZ=l3nSq0WzRDI`>-+s~%{KOTxtYG3Hr%zU92woF zGSvA4f#;X|pC>`hj0ld*Gjx!ajnRqrtQ%k-db=rw#GF$-`sewYSsDhKq<>u zTrNNc0BM+`eNR)v@EoIg>=>)NSzmoh6@N;9SGxM3Rw(_wB1gv*S9 z!1k7KsRkvmrBN-%O;2^}D68o9Hbc0Ur!q?p1{Z(-DgqMIbeqno*F{igm)7{5guOuy z^U{C$Mq%%)gUg+p1@^9_t!4}BYtk_?PmCI61&)SGjNo!tR)RGw2<(vUXtlSJz|-}e zNS$8IgupQR?ziM>9H14p{TWVk>fO`UBMC!)cP0Oo3__4{-ter83EcpoRsJ+wn zNXYoskTW*;tlNsW@eTyu5|F{sNNn`Lh1AB)Nc| zQ+Ax9_A{gndTw?kdwXkoZ(8Z)e#*SFPH%^=w*z0`pUYalphOAcPEYz#N^c`ADnZ=c z1iyYn_=J!i-QY6%lB1qv9>%|jW=J6!4Ur5ITs?6YP4O&)7bfjovUhjiB6cO0kT{lH zL~j*)lF3Wha|!#ZxFea2|2Tf<0@79dgx`nahZitZ#Swmw#(x^0xPZw8Ojq#`2@fye z(JC_hdMrMp*dF&J<*O(q`{LyV*ndXn66TI2<>KTbesvaMQN?e#`#ZJUwS?2$<>I6w zJ-dh(T%H#t#$grPeMA>H$p3!nLMJ1#~p7Iedw)2tQ#^*oD-W#ICI_FC^D_a$Vr=7{XUs3}Fp14Hq?3HL4a|UFBvYHKcgv zjt6X>RuSrGqXPI*a&vBxVZMwjRC|VdDHUpbc18-|px&QzG literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/domain/QRegion.class b/build/classes/java/main/com/example/domain/QRegion.class new file mode 100644 index 0000000000000000000000000000000000000000..381bd4219d1ee3aea25dd6f4eb9892f03cf512ce GIT binary patch literal 2561 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 literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/domain/QStore.class b/build/classes/java/main/com/example/domain/QStore.class new file mode 100644 index 0000000000000000000000000000000000000000..cf3da4e064a2ded4c716b67888d8fd79f4e5b926 GIT binary patch literal 4476 zcmb_gX?GJ<7=CWrGD(=Sqyn1wSozEIpF5d6t3uYMgXwWc2hlZd)tE4+PY8J-Rb|#)8LEIT1G3|J-;SBef zj*&JTqti%{bzETP<5KV=dRGrzTZ}V4t+8q?5s0DucI7 zp!a_^VK9spn4_UZAm#^0N6xXFahV014BONYE5bLenkXWh&&B&Bk;@WB6f33iZ34IY z8=r^{$`Xj{SdBG=eV;u#ViI;Y$*-v?5yTx#A|stHn6@oJyHm$qxLZI^6->i1-D(s_ zmgoI7OH{_fC6eB&BE46~9azuA^9^(bQxr*^eTY>Ta*auEbO^bxfX%ddz{;AQ-eeFP z1p-!DL%YDNsXo)4&kae3J9Kp7LC@jsquB!zz@91&UsYeVYe*vCit;S!(ysi?h@vaO`>zxC#>A=twNw=IW1}G{D1cw~lV?5m@dk+G7b~uRwjy$eOY+ z9@DWG>x0-&=L+VSWgc>YJW&0v*r`Y~q^slH=blT!kL%cvJwXifVzK3Qr{M{K*;Dz| znaLZDq|E3T#?}yPI;SJA(s^`*x1q^&mgl)3m~S%*<`Bay+pVKx6k`I7mMy`ujEr@} zq($?p1SGmg!{M67x)Q@UqT?xfNy}@uw~%LtaK^(pglA-vIVupXU6nEn-eur6o9A>C z@I0?36_9DENQk6XHkM-&8Fx|$<0Yx-Njd>^6$o@MSJ#aZ*uDgSJ@2?kF+stW@Dj$G-or!%gt& zDvD`84A(yW7f{F71Fj2u2jxrNOYcS?>&6wm@*qn-?QxU8i^# zF*BH@!})ZtQDEsi%nx>f5hky|O*P?AJw{-DrCN?tMb)+4l$^=dYEg1CRf4p^zpDJ% zql0vrj;OiWulZFJC`(Qbs?v8keGAMjgUX!=1y)Vp^S6Z6)$bUoCwq($1&fC7DjJ;< ztKkQMrM0G^avKGXmiIBm?Qei@_`Kd!ld5tsRJbNnnc_TO*CIEz_%c_{aaBumD(K<< z{AeL%c3SeoW~Te?u}aY&I`#~f50`bC2#!>X7HWe znz}wDcPBse0({PjMMUdws5_6)BxaxEP5{UG8&;>Q>BAa)#Pxia8Yh%5;M!L-KblEd5f|Z)h%Rt1HvC4oh%nnYLz6TQg4KQ!4n3 zYIHsUx%2sy{!`p?f&4<*ag^Gnn;k_r8)L1lCB3&#_wpXfythnmqo=nKr}5>KmeZ6d zL0ndpzKzoBxEGQjuB?Jz5<$+o62DtqLQit2D4EPSLo@>l$xwjX;D)Ow;-V?~8N7P# z9gnrHY@5XL*kwd_$0pG_fmN|sWbGxao4`G>*hQ?mh{Oc$=jH>EO_#8F0$cdLEz%R& zaUOk_Fff6Kx$%hNc$9DZB1R-tIx@L26tNWFlSOga35>+rA_p(QK8dEwIJ7$^7vqz7 z`Yh_j1fG>})~hhCC6K@a{NKSsH1PwqnR8DIU0;XW7>T9W!PS1mkU<;gl#PtgCIwE+ z_09w5IKINyM4BEem}H_JS1{F;rGTXRhE!*Hx(0zOco+2=!WzES@V!RWf~zY$tlSMK znnMcj#yZM?hq;?UKQd@P;b%&g85CE61DXiZ1%xgmygTy3BwoCLSES>jEPv-QObZxE NSIjT?mFEGR`xm$2-Ddy* literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/domain/QTerms.class b/build/classes/java/main/com/example/domain/QTerms.class new file mode 100644 index 0000000000000000000000000000000000000000..ffec4a4db9048df2847d76b089bbd42ae46e160b GIT binary patch literal 3458 zcmcgvTYD2#6kVscr0GB*rR7!-kV}&)k&B`vprtKPOrfQrQblo^9MZvLCQK$syrH80 z4S$15ipZy*4?g(|{2@N8>zqlap-n=4p%0lkXZAjOuYFnj^v{2O`3=Asd>2B8z>cg_ zOvrm?u~d+WoKrL{JCTuYu^d4cx=l?ks}lI6sV=`Br5 z&&-*gdEU%=j$0MzyXCm^rfZpt1u1ZPBz@bwYbFY&olnepu4U(wvGhg`OhynvUkHYQ zP1r0DZ>6N1nzTL3t15ranPr;oNm;h#on2#pykM5g$&Fc$&4;i>;82qoajWRqiCJaJ zHylAfqRP(!f&C+G4J2dpy%@w$2-^+pz)pdkO-#({JP^mta-}3)fg}3RHOX4!^(v)DzJIAveJ&7SAbtOa1@CE@a0NzQAKaM z3E+mh^y{K^St?)rqXJKk8HnNdvm(%-6vjz`{-RV4jpbb_(^lCF;WdH7P4ZtfOC`2S zVtQ3Rgx6UHZDeN~gnMxs$q-Too1I;ttGHPQD`X1O6uYG?5So~}Iys&pF2CNMslp~5 z#9Ic&a84lNCsqLyc(9R>uggK(atIu4!ypQfav(_5gn^ToWR%+;9jJtHK_KjuJj=1o zfz*yN)-=Qssv+5%^q0Bm1Eb=APNX#*E;X!*J9$NtV_eabia*8o&ZLnD+HB06VEP|fx*5|KbKc6F$0$a+G zRwZE8Y5Tw=n;9lPwAwl{AUDzf`u{{8X&-<%}9b5`Cqy^2fQlPx`8OF$_< zA|ClDk#@3XVTGNNXX(S~w&$$!K>ZXw4i#x>I#9q))p>m1sxB$|$%(I@9O9I-wVcE6oP)u-#5L(QSl{8A9H;e2Rr*Py z3cfqMX|huxY18G`-_gT2U@0CIqd%kb5qjfK(7zCWgsnAfi^rq8mN8tzzIgm0wmrm) zH5}pQNHo5Tmuh&0?(177=W3Y$fwnqO=5Jib zLH%yW5E1XgFh+TMI>on(^!zFg;s%Z&&s~r5L%yG==qS-++{MSla*yA-1sBl32GFU2 z{Z$8M$44LI9p0%Q<9&hW0k5+G-cf8JykWvS%->^#cZTpT6W(>gTO_<95)JU|0G^F1 zJ|Ut{iOb*)ef!U4$;@v~MBgA`> zcqfVX3h^!wZw@CK@X7$M#C?3Zitav=PM!=6CpuJDjFad<6ql$0}Iz(aLEYc*-z-PM7LX?+YtP5{$4Lc}t+?M-P!F@@(0W1#{K2QV+Ii)?1pJ7SBhz>rx}GFEK0Zj8{=gL)zNF-mI`PqRS;--g9=76lU7H{DAM(9TWBucp2!&Wc-0w5{8@*qqj;V!X zbe-T<>qY`ivMn`vgvpROPphxv8SfPRz*WTV7Q_VdzL3H8Usxe{BPTC%E{dxxw{hiR+>mi zH1PxYp^R^@7gK7HHtp`r&b*m>Z}xuu{{9odE4)Y}A+Xl=TuXhH?unzUj^|2STl=bO zdwQk6Z1-%Zqx>ucQaOxaTwwgAt?lr&K(bVBW-x(F8rd8skrSA|5>FsucLWNxPx4e+ zj?`VN=IQR10l1Mv9tBp=(p3V*ftZ8Pw;7d15veq83apH%K$q)jYg-0tSBG|Z#zyvg z+_|c02X@O*Z?yJ88S=RTfjQzIOFxv>iSh$G2$gOttJ>Kj`pBdAN-JN6s?(HCPcdvF z2#wukq5o#EUgPW}%Ba5Gtv9NTLxIJSHFi9w=W2tkdyXU7bCNod_Hjq)Zg^y@8G&@G zFNnZ;sazYu#VGZNn%eO?q&8o(wW{~rmhu~>hQLBhR8^mjpsHANJh$Z?TYo7a)>v1C zRccve2SaKa@w~Qln$ouoeq1CK9@!**;p&D7n5%~_ zq0IF%PzCEFfTo6l=B@!snYYG2Ko^+)I@D4A8XyiHHjs=+*(0F25%~&%D(mM+S2oTu zH4IsZAeZ`~@k25x7RT(24hcLaRK{plh#Z4Fq_7$FX+>HZ%Ae4F%3ms?_ZfHQ?Z}IZ H=g9m4(%2%* literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/domain/Review$ReviewBuilder.class b/build/classes/java/main/com/example/domain/Review$ReviewBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..72e8e33a3e7e19a33af7cf19495e920f5536149e GIT binary patch literal 2834 zcmb`J?NS>z6oy|Ju)$e^fg}WyP$zW~o1}5SzYIx(8w06<6ldsk`b)OeuwlJoys}$< z^genS?Myo9q%*yMUR0+?t7TZTDr3*&$F8KaN6$HuUP=4Uzi<8qu!cq!DU4+>?qC9G zhTKcu=Vg!kFUq^km!hQ@(yOlTs)r0?#nS#1CNY&k*1-ih40l_yQx-q-&XFg|ZQ0?j zU)~daSNv2k#d^>6+M>&la@$0&pW^G%e^Jr6iw=vq zEojLuxy{DhYM$gOgk5p4pkd=p**@0vMF&f`Mx*G6PE#jxt!~MAJNy_DZa7%RJ35XE z<1E?y8~R%%gPRPC7MvM-7J0m@=e5A_OEH#iIP_RM8fDC41{5=#xLATkx&MEfrTr}K z;BE#*2PLcwEVAJ;Wcu9eiQOL=?!+@S8mN?#naq)V?mKu74;U6Y{7_V--{R^!R~=9- zP~2C++Z*<&Y)&R3VX@>$i@n$LmD>?pe%}q;rY9czzEoVfl%iIeCp%4fSl$r6=yE06 z6;e)Bwn<(yb=Ma=J*}DNoH}Z6+2YbMS_r z^r^YVN(|1HPdl#a@gNYS;OPNk2D=Qm6BA~ehYY@DSU%sC&VDm#xJmaxiq5Sxz3KV_ zLpf|Qyia9HUqcBS-8l&x-7pCoT`~z9-6LmgQxu2pS&H=m)ynjhY0JuMu;0TJKBRX# zG+x9##^7InqAL@08O=HN3OK+|$( z_%rz2#-ARVZ{{=N>&9UI^Z3HXpB!kLVQXaL+dR67xLe)ydnv`!Zbaz^jxOrDm~X< z7b(H`B literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/domain/Review.class b/build/classes/java/main/com/example/domain/Review.class new file mode 100644 index 0000000000000000000000000000000000000000..b56c15fc823065e3c3715a643339a0e1de805f0c GIT binary patch literal 2833 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 literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/domain/Terms$TermsBuilder.class b/build/classes/java/main/com/example/domain/Terms$TermsBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..8a034617354557f97d81b7aa999ab2244f114217 GIT binary patch literal 2750 zcmbtW?NZxD6g_J&Hm*_=LkS@!O;VEBBt`xHh=CT|^3fVd14F0nueH5}4U*O)t(o#B zeT;S{opjQfK0qI;)4P%!WLsg}$q%h|ukW6F?zvaH{^#Epe*;*>lL9gr%VFF?7849p zPx%?Q9qt|5`^~4Kr5Pqxq$l+n!&s$yG>JSWb0}DN0~W*GmU3xNQ};9eNwx`lb%U?{r6Z3=(=*cYN914=Ds)Ya0ljir{u z0>j*^k}9B#w~bJ@7=ElIqJ`Nc)-mx*Ej@;j(*=das9p2Co~H*_jJJECc$1mr?87+DN;Bw z+<4OUv~utr5_8U9}0L*pQys>zckeQvZKjOc^hu!5=jI zM$-%ip=KkO7>bFp4OET?wXD%N8BE$Tgkzd%?+ z*ni^o3)}}T3$Tz9Ad4>uGJ`Ms(pnE~Wo*zpPeJSS?BH8kmB=?wf4mx)#4h&n9j^Ze D6OMC( literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/domain/Terms.class b/build/classes/java/main/com/example/domain/Terms.class new file mode 100644 index 0000000000000000000000000000000000000000..cd4201bc45e04b2cda33cc0021ea81c676ed97b3 GIT binary patch literal 2373 zcmcImYfl?j5Ixt}7>pAP0m>tk(2^FLB-{5RCZs?fb!$jfETpubF7}nP&3f0`T}Soz z{*nHJRw|0rNc{o*QB}|EE{<_FMfp%9``$Y{bLQNcvt$1L=g+?Y+`&N}8HMXjuVa~? zb*JkXtL1gH?OF}vcY=-Rd#`6ZE#nuUkS!vIafR`1+qJ_Tg|W@@@gycNnMa|BDHIhJ zUx%iUv0DnI`cL|qwjAxYt-9y7s}g^?h-s7*a-khMMqzfy=_vH=#BH{SE8>Is3f=QO$7nZ7u~ft|RurZ?rgLKa-L`K`-44P5qh4q`mRPC< ztRkDo+X@>gm!YZSxz?Tz%zc-9`*~br+UQmh#;)({z5o@lhOENU_dWV`%&{HVCyv>5 zT`$x^H(<5M_Nn$mZFP+wFvhq|W7S$!=1zU|(749ep=lj!r)TIk5rlGX_b-TGzDB?7ASyaVm_ zg{Op?)*gB0LQ$7OzNv$zZZY?IYWRNqIH5hZTdyd9$3x@Kxn9d3N8EG}Cq4 zHHSUve?zks3M)x(YVNa??#$L5uXEx(wFXruR<3Qr8ihQ|{3B8p;d)K&9Bbbe{3J;> zd}8yu%de#?irL!qjeZMC-nc*a>hA!8jz@#j};cq7nBN4ids4_;S;a*o%VIdP*5!JFaHyf zH>ieCE*yD1ziA%WBCtZF$6F#4g{!>bt8aTeMc9X_LlYz|<86vHm#_N1ql3W6F#<}4 zG1fW!Ryo6S$jI2`Y<`EQ8J^zdy20~xgZJ=04IHdAWn^+jD+gw@avIXQ8STqa_&mcZ zv~2~rftx=<8Qg*;;~gL1Lq7P3&eyog-^2^3$ImhL8}|wy^Lv~tFo#c){io5B&+vH? zY4N#ulYqT%*NNpp6uuxPN=+YL%5=>4e!1fu*LU%5z+;yuccJwtkAm-)W2M zU*HPNBTMPL>_I8D2RZE1Ph{{bamTrCjo?-BGoWnitWBG`sOv`;*=5vH8 uMF67z1%8(KiL3Ttq-qZtkipl{yC7n&@%#-xS?(3ShV@ue{y>e+3c} z5)XU;AB7liLqkz2DoY;C<(wHG&(B}qe*nN^xYdRVRGUx>pbiZIOJkg(Oi+*H>*1Ip zC!q02Y2}^>sBUZyT5t+lO=t&j8Ug{gBa=${h-sFPj7^G4OAe(*%cq#rGwqc7B%l>p zLPv3*=~lwBg;OcX&_tMQb7qgdp65OrK*tleiYz`vyeXI`rGd)TFrmKI#-US2=K>yt z#*Sp3S*1t&7E}6Q>_jpYB_7tvt%LTyQ%}Id6JbKk-HwUXzM^;rtZkW?1av~B=~a;q z$?hQ!B%oV9WPnzAe-^B{_lhUH8=gcX9xE7;n+@u9THV+@Rw>TTGvf#*zn!bv-Zh1d=(+L_=*)lXzW*LS_82E6`G$pS%EpYy8wKJYdrO8Npy7~(V2gVmj6Rkfoo;!>*dqCJj4z5Z*rTpcOW8I F{|);b@uvU) literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/domain/common/QBaseEntity.class b/build/classes/java/main/com/example/domain/common/QBaseEntity.class new file mode 100644 index 0000000000000000000000000000000000000000..70ce739a6c8394d61783b0506c4d2709ce137370 GIT binary patch literal 2093 zcma)7YjfK~6g}%a;xL%`k8u%a+;-w5Lxp7{`Q#NgEc@0wv?~Lt8~Bjh4^Tk#hCPv1++5r9OJ5 zv}{N%w`E<2(TTwHcVSeMktYv)CGfCN{a(J3t}lZ_cTY!Na9DP#7Xd71kioPC+r|to z2^5Dp8B!hIhL6cYV6x%`o?d$^{)R7Gt@6d9JGC@s1*Ynel3F#^wS}y}LY$2Dn#!$) zb?I;N-9C32%;TzsoQ(x63alEgXRG{GUuJ72F8W6CPz;OMH6kRYQMtO?7 zuG^T!4GK6k@l$ST++^zQV_vLD-JmSnxQQFnxQ#m&R&3nGs=(5)J2AlptV5;uSt$Z@ z1?N;62J60!0vr|%Pj)Lwpup3kkh>?#X_N#q2LpvWk9SSIJP^2ghLldtr1GAP65bcM z9|t-2n#uyREyaTNYbt7aVes{nO#!hhFtZT`EiD6GlYU!Gu+3mC{LHGG+Vc(rsoN1# z-x`|A+p;Avr>v*pM5j^ z{)uJT9ZmP*P$n;DG+3|h%-J*rizlDJy^-1Uyy#P@`^jJ$D;SXdp`NFwTIJ%RWcI># zR9D-c8NssyBjS z31wPx9Vk>{A_V2PYmMQ);JXRI4dU33Fc!!DDT(bAOK*_p$LbC437o@V41EU6Of|>Y zi=0IH0R~QwfrE8CX3!0Ww)q5%Ws|Ff(>hHZrM76C!FHm{w+Xkr(d8UUsR2qW{O;y3 zM@q|_vwczWJxY1(;LARN9TG_633h2R7qUum%-_sknExhQe2sU0g=?he2a&&%e1bKQ NN?1QdmHQN){RbO^9i0FG literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/domain/enums/Gender.class b/build/classes/java/main/com/example/domain/enums/Gender.class new file mode 100644 index 0000000000000000000000000000000000000000..1e0fa50f5a608c8b8759416c5827f198706b7631 GIT binary patch literal 1176 zcmah{?@!ZE6g_Wk*R2$o6G0}3;FJx7ihw^dBoH!;W`N0b$>OKC?Fl7aYr2m3(LYH? zB1EI%vwxKFzPG6(#;i$u-@U!(+>`z6y-k7)6S~ z%vQEbuZv}dxiLrxhHNfBcmP!DcfP(8G)Vhs$@Rs4yIB+A zD_-*`a!Jmg?g!l)L%I~yxmV$#D|vcky3d=$nf`Ym45>X49R-b-JfxgRgd{?bj$ATU zR_;-@iyiJdLD+D8?lC0G?xD}4c1XNhE?=R2*{FNH0j~BHl4IT&xD%TNs#gx$VO{LH zQvXnQdza;fZ>`X*CuryOtx37a09o2iWoaRSR7UP0Wf&CCVV?5y(W32~%(E~4kC2abZc81wgXv&$>m18RBwxJyB9NAM0%g(!; V7Ac@xpk_2Wb=!N0M-+?U@h_C#^X>ou literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/domain/enums/MemberStatus.class b/build/classes/java/main/com/example/domain/enums/MemberStatus.class new file mode 100644 index 0000000000000000000000000000000000000000..789295668327a5c23a45797e235e6246a45ac20f GIT binary patch literal 1175 zcma)5ZBNrs6n^g7ty}HbixXtx3ov9IN}0k3vq2yWCQAmG6qgV`-EDQ0bgk(+;zxgy zjzow?!)Je#@!W3488lgw_Vk>4p69&u>5rdZz603CmVyYwO55uh)_dN2=U7I^>v7vP zEO*fB8wXaeW%*{ngF!z523bQCF^1S)?YQ3DXIO1ag{=s1Tth;DwS}<_-0B@6)B_@BsFA^Wr(&N&$SqGMZIyx&$;1nw`&}=&a8G&QIW$P1+yCF zaF=1`Pr^P8O6AYFGq8@{GHewm&^3qm`<01+8Thu_txQ%B1R;N3!#ym}a;mm#2RjV2 zlT>45U2nz_RcZ2k90_3;H7sFSY#{8R&rmAr)9!$({YJ?(uS4Uf8n$a44#amm<}HUJ zm4CFMPq|};Y{P4Fr^$U=u#G8Ym-mP{dvh}k=>sb`^*XP(PdS0*(?D`?YLih5LREzk zHaT)Uzhk@HVMv&E*Cn0##48o`Ch4TwcE+20F;PhDyEKV`-yrSI3vmNvNvA+MFQiE)QSu8|ro0vMmdJ`r9YXz#nQNpzlE?6vp0V&u zqWn3mA`<3rk`)Lw%SuW&D5-NLNy2OJENTKsk4jttRk1n8!Hb)Cmsa+5(Pg6w3y*$Hnibb&b3)o@* Ar~m)} literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/domain/enums/MissionStatus.class b/build/classes/java/main/com/example/domain/enums/MissionStatus.class new file mode 100644 index 0000000000000000000000000000000000000000..c0aa7c5ba9fe4834a8bb65d899546898d3a41955 GIT binary patch literal 1187 zcma)5ZBNrs6n^g7(XA91bAn8K0j92-Qc(Ef27xRSNy^NcQ_?{K3H^T zw{v6%2mHvTNcA6m=)-QAA#3_g?lySf2)aI}?C}m!XK(I?A+uvg$9`*{2b2@p0gWU_ z#|{~_AoNw}VaIxoAG92gy9{Z|X?rBNfOw^%-XN(|n{I!XF9!;VjaP^5f4xFwEx#Ky z?N^T2M)sPx7ljfwmgzg>=w?V8GeYM8SrRLd$qRkbNs{~m7AWr#dGln&Pd$VB1>;wk z_(UGvD0+{?XA`*#` zWF5+9P^_DirLc^pK5VTIoBKwn>^DJ8VDl95Zumh=SvJT#XcIdqBCqDB057`rP5ZhAX3*17?Nx! zUoN~7nd=6kGLzrk?bO^b5XT^cmMG_ouL~x_?AyL(>KMj|hCu^2af=qNI-YAW3?);= zBYwiu4tEdIrTrtT+RW-0!)*=Y1}1Qawzw=PkOnmTggY&(^p0UE+0(u0@J1uslQ5gU z?H*)%CkO(`KWX3|rs)2h?b^+ChLK*XZs&_sIgFrAN=$|k3Bw2@Dp1P69Oi`za+3x_ zGMVa62b%b&N8R*lBtf)jyVg#tzHj+^eBYtW>OWRV^`$aHyy#WAQ|7)cxVnU@%j?7& z|63b|*h{N<=+$<)Pc==;r(@LSp-n+g2+Jipy#pQK`8C_+4nxGW4_w}C`NXRvQ)O~g zuIhBPT<#ep6wmdw{CbvVnqJGVTF-5vL-f+@3&H~%8Pa}?{wBeVQQ>=lBDq*bvaXC| zSRghgY$_`0{R7NX-$O!E6vanxBlZPD7a0CTh+%=gL-L(M^%F=VAnO+?iVi)_=FTyC z0Ve7LSLz>8#^_WbgU5uP&=X|Hd=#Z*GANQPLs6ku+T8s38SZ|jpZ{ahuqdvOOpySV zV!%^+mSxLIOc(B>k>aE!sPqj?Xy3sqN*jtY2p=xb&1VxNED3x&xWrkaA6}aMm9&~--c2vM+=mxyo zl{9}<1T7IQZbw4QX8KD#>32lLkdqzKYwim+Rk-aLf#YS2p+d?*AHi_8Y0*iT{R!h` zOkk2BuSFEZ3}DTV@L~)T>9$kjyM<^`$;1Y2HBP zFqGC+FKUZrX;ziI`nvnCnqVS460u%UF&!zDC8cz%Bi>CcjmHYOS;8&ccHo&pzQZuP zFCoJ{wJY32KdJ3y-qtF5#_&A5$Z22#UEyKJ7x8RUsoh@J8%#Mfa$w@dv#zj&Kgq;f z_F{@?aNl2-T6jg!k$EF)L#Ce|f>qgBU{_{>zE`G4RTabwtj17&7}Dlx_&kn<*;9j) z9V{_i9&pL_@eclExbW>zI&KrEaFLGS933e`bf;4uv=;PKp!PDgIde7-jM4FXXskf7 z^h=@mIqJFemYI?I8?cvs%ujSTP+$~Qx*H)grG`4SSxH7|%u_lB6ma zCmVn6l7q&_$@iFgTz^Fty}~G6C*I(c-K@m-NvrR_;#$gGqWlea`U~?d&KN8;?=S;= vi#=^&=kXiSa`^p#Q-Acwrf{9wBI(_rYXSG@X`Et<^gq6j5iFvCzi|39D*YX( literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/domain/mapping/MemberAgree.class b/build/classes/java/main/com/example/domain/mapping/MemberAgree.class new file mode 100644 index 0000000000000000000000000000000000000000..c700446b86a793e0ad3d6c547cba16bb922d5b35 GIT binary patch literal 1815 zcma)7i%t_k6g|@}ltPh*h@dE_sHLFm`vsUFzG?~@ZJKCI%+QWyWp}pO-4gjLO(Z6o z_yK;D@yvEZu&zRrcJ7^f=iJA+GyVDN+YbQCSk56MaJTMzw)!Z&maFWB?@347o@})o z-L%(~x1oZSW}wvUKKVi0aT_Y=hk#W;4|)Z9mmKXx_XV=Wxmq55$mh^szyJyY7Y-Le zAmcOyhASWBwzOTz_!VC_7Y*8x0){ZmFkYOIz{yGqXeY(^z-R$SF(%LxslW>bPNex) zjcu_X=w%9f8T0ZAzZ1Iia)RsuivMNJfsY8E1moZ^k zsWH~1-l_V}wQ=rwucG?qzdRosV*+bcR^AYDCKd9T@90(EZF`!SmX@9p$alzjXISiu z`yPwAjn23TEEng}XgJ)onK-L{gK>r`j#le!Gn!RN0yqr`BW1mv!pUgG^}P*$%iim? z=|fXRWhOexoVo^%n-#w<-I@#>gP#PkqD_Yk7Y|tiW8@j5Gm`?R(rZsfmJOqCJdXlX z>8_n=6?j_gPB<;21USvq0h+7vuC1wP({H?x0SP2yEU*8S-wx{Pv19s5``!a^*>s7? zrH(`AYOv&ibrmKx6Rc3yobFXuhM}T5x(_aSLvV(-dz{Zv78&ze@JX4VHbQNZ>j~;7 z6{c{C8+-v0^EkEBl&2MDh;WwTxe&A5<)#0x&w2DBj|;d+-y#Fda5bO4?+~xQBKwK5 zz#M;jxdMYICGvc1S-_>_q)of==qY_c&K%3^J2r;P+%eVA0XD91{S)XauB8ACb^}cu z2y`7cQh-Lffu;@svdlaF7tmK6``lI9kpqBuwQ!Skn(n?Opv85pM4;0AE^?)XT@02k z?P8=GcPPd!b^Mc-@nkX-Ml$>xw#H(Xv$#chFiVHw*mRWZ{vKPnO@|Eb#1m!cyi5Ha SzgA4$A|>+|#=D0ly>;!tbbv%h->2 zw=2niM?@`=?8r2gDqa~Ft@mWu5eY*Ky_BKaba08d z7o~pAv71?D-ZN#)Vvf9{Oa#LPm$%iFIh-$J0gDV?Wc4y!bb8pYfrqzAkwcJk@g*$b zq6zRj3`zCmYF#|8b-C>F6*xcTQfqr9EaS3=D`mWk_XbkDs}sr;t@@CMJ#p_hhHL%u zYy||hKE>7}n4#jiTE;cJ&#(~j1JO`%o9kbs-lra=EY_5=hy7q#W`~hRnQ;i9jQ-q< zwT#4ed?-`d3dNl`R#X90Y(zcN3{})p2mYprMZ&e{1PtR1)e#KSO&N>3JyV_cIXN0@ z)#l+IPox>=ljC|{64Gr~aGhy();Q7rG!%x~sWB@%Lhq~2k38X#&>|tBa^xLydiuvs zuDlvg5C5wh{-~l)9leQ`Ie-|}s-tVAL>9F=+A(wFd34q^UjJqP$TPmf4wX&|1PIbb&Hks-4B-$DL55D@~;idfi}Hbl=Q?qU%1)iFUABk4=|$PWo%L+m>#W95-i~QIH$tAKf=YhQ1?6Fr;p$M_T;cGr z&2Z_>rgVwe*x?FYO9eXk#_3JBALs_4(ImAsY76GR8k(b9XlRZuniF##`P21F7^~Ft z=_@lct1rR+%%HE++YkX~u|{u0Zd^XV4Ql&kFp}nDECUJ%&wib5dNq5j6!M>xt`~2@gFQbSbae$c!4wYoTF#{B`!R7CdB4;(V5%N@kNfkO=W0m zVEG95Z(K6awwb5q6;^;ZQ7k(sCh%n@>Z^gIe4WiLA)vNMv^VKl$G0?^Avs0*z4;DP K*uWOP$I@#U@Q@h* literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/domain/mapping/MemberMission.class b/build/classes/java/main/com/example/domain/mapping/MemberMission.class new file mode 100644 index 0000000000000000000000000000000000000000..78df2b82f3700b2a0d960e36e4db9a32c5e2856c GIT binary patch literal 2297 zcma)8ZBH9V5PsI2F(ythBqV`^#A!*fotJCcq;KS<#u(zrkP2K&>6hxTH*n3}p5;5E z@~>K{C{io+2lPi(efI7Yfx8Y^vUlco=9!t@XXgCRzkmJ>;2B=!kP&#+4SZYv>iB(6 z+P%PcTxI)CzwfGjdrSIzaQ`*|l^?GtJ4FRiwEG7jepSsG8o(oKrE1f*1 zkk4VdfD0%Hl+PPQAmjD~imhLqL&x?UX3+}N{;I~iRKN_13=~FAGz^K_GQdhT^g}yM zdN;O=z2^$Jj4Sl^@_Ep4Hdc3k-);vkdiMuZs_iLvZhqPY^kdz=L{mp?#n^whLKcVX*YYTL^p12 zN+kzQBzqml8%ml@g^||x8R(-PjMqNu#~#h~#&)~eej`va#%Sx5k>L zu#>y(o#ytYK0Q-S^}rkYih#v#EUnA8nnp~E9-Z1w{bg;Z{OC!gwBFdL{n%=kR%-Qj zv(s1+xNQX7a@0{fc&&6v*|#$49*ncx(3@$NR;%{Y*uq~0uKJLtr5vAi=Mx(Jtl2u9 zG9*@Vdr4~u)XEhTVb0%OtiY-VJw}^pxk_#ibvw2ll7;L|+0#^q2L8;oyujZJ-q{~` zp-*F9Mop$W$Gk?`iw|2t*YP^ez}5I^5Gy)x$;Rrr%V3l|qaFb^ohLY-)Q-JA!#vKmMMb3K* z89j16w ziVs8BwBgkJsLkidA&*D+g0^2Wi4s@+nfeRj&3jDzMp@u7e_ z&3$c=t^R?WcFUY_o5#0&qAR8WzQZcl(?C!87EDq&33PE3XyHtt=XhZNnjHmNIuq!7 z)C@rLqd<4g0J8KO`F}v~vGDuI8O@vl#G!#TOvKmZ5im>t#VUcS_l}XP-ap30>Vsp< zRu`;e%#WfMWAw*~S9$~VPkE>%O*wt}i!re#VoB4-LY?xgMblzzbeZcleotPYg>@Qb b(1v~Xd?d~)43Zn literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/domain/mapping/MemberPrefer$MemberPreferBuilder.class b/build/classes/java/main/com/example/domain/mapping/MemberPrefer$MemberPreferBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..3854c31dd95d33e73f29b2696afc7b05e2fe6144 GIT binary patch literal 2296 zcmbuA?QYaY6o%i~B)O-!EuI*7P##*%9zERQR*baM(uFmHeXqYwpRmT z)VInwh0_kct>6s48%V^aj!91jXP*Z>v9Zl?A@4iQlUL7$lkV`QD8=&?e2;SsCqlj_ znkwpW{ioEs^pt2G>4af559?=Om^8d%aYtGDqZerzinVB8CbAufyHTVx*OI(3Otk_P zw$+|{Uqm9N9Qhu@XjA!uVWK4?@t|ia<`Jij##(iFu*G9(=Go$?-jzgZ*z~j|%vN{g zbU1hQFCnD05i8PUc{0@_?GjgvH6b2|M6arZdQWv(DV^w;cT;_ni6VY3 z;}`tuz%!M7i(%owhm7{so^VrFX|b>Hj_$XDzw%|C8K%%x9{GVt7FtT}^}610%(<0; zjgMY-g~j}7&fao3GenaI!KT#0D}j3JodF&4ldN0Tq~Bnd&W8PdXrA(ouEFZm`qm;k zR?UDXiJoZQ(m!;2MUMp>MjcO0G87qS-*Jho#|*7{h(CeLHvX|A^HWVSzL^ZhKaDFk{^XJQ zslFM1dWi4hDt)ri=Qb&5bewsI*~g2oNut*{M%UyUoUn_P>ON!D{RjM*ahEB6!=3xc z{1@LCEDdjQ7Wfo<&cYtUPed!=+JI8m`)jkfL1T&h-K495-)J^Pwk7&w-@!QUqKV&e F@_$VHGnxPZ literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/domain/mapping/MemberPrefer.class b/build/classes/java/main/com/example/domain/mapping/MemberPrefer.class new file mode 100644 index 0000000000000000000000000000000000000000..3c6e1e0d896630f4b819987bd5da447dce6038db GIT binary patch literal 2366 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 P44J3q9)93?06+c%Y^3LY literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/domain/mapping/QMemberMission.class b/build/classes/java/main/com/example/domain/mapping/QMemberMission.class new file mode 100644 index 0000000000000000000000000000000000000000..56a3a25e747534cde4ea78cd0c03b025859e857b GIT binary patch literal 4186 zcmb_fX?Igq6x}yTd1-iMNCjkQ1uf9L0#Q&vQcx(Z7TQ|cQYb3;NFMEjOe8Nz(IpOb zzyaq0$B%wyC6d+yoi>@(ccKmYmd4*51v)eY1v=!tvjrlXtGowk9 zAj3|MSg}ao{V0qzB7}t+bRA7tBoOhi{!o?q0u8+by(7Z{8|xxTPo(+1Y1_%iLWEkP zV=2M{3p#D??GZ35P47yY`FyOdx=JSMOI3qLMi=5CEYq-D#|k_wu*QoP0d3rJM##HB zb97CuBBQb-qBaRnyc=fCaw>L$yRx``rplPRs>+r;t79kjGQm9^sJIkF7kSG&rc=mk=oZ)@V>*vHD_uzC zqs2}*tYoEE&*^v`y#gWEt8PjO9Q^M-NkwIk4(jMaAMNt=sNzZl13F$%5iMldhGj%$ zk_-efL|0R)tIN6`(Qz1~0!?;awmjQR+83;Zz_J=1M2=}VDzK^sImJdR2|1?YMfp0& zem|JYFcqE25RTwwna#)9uj_|J`djWgZdSjdV+baDpz?fPNQ$VjAmVI;Dff}mz)rZj zrj4antQF%rCSVKr*`owvwVd^&T3T9qA`)nm)FySr!PvLdw$#ODrL-cWBP(AnZGZ1j zch|_)AXo-XZcNHAZ3vDetWYNus^nkQk;8dD#I+zxFL?DE7!z2MxA+PtN3EQE(+~IV z7Z3+%KvyQs5=c9vX0l*4+~L2!uKxZvd&00io@Qy}$ZNMJE0sN=)2(5LEh5^NiJQsN zVQdd=*yX8bt~85U)RZ9mh`K!JdAU>tol0t6##nb3u~Hf6$|UIC;yycVx#%PAoDx>H zm*$q@X26-S^8&$h<#8rl(Xom>j6^e+Co+jaGiRnOhja@BvP>L-*18_3k{4KB4a?WP z2z}7=W~XN+R1HJQ?E&vvd@ywpwviwmRb!u5uc|6@4rOw#lHADQQDA8WmF@^5uxI|> zgIUJpX2Xu3={K{AMh)LE)^jhEg3<7uK%49v_Zn#hE>|`Tb^E~#@(g0R1J;$Qo^urM zo$+LGJoUHBjia8ItH+X>l~QUScPC9~I8(^QtsYy>@y*rkWs4-0W1<|7z|U2f#03bv z#+47RbIqBZzgNn}#qXtZW>Mc9KPdNxlDo)#zToBcn_Tl1P;%_C>YMLj`TQ-O^RX+h zFJb|Ivw0HpZA$m>?-n1w7a3vEaSQ%yXq>^~tK9M79e#$?sX^O1Fvaz9R~qjs8+i}! z;eBfSfM*SY3n=xQ;aBR%(V#B07#+9K%yxVmD@&h*x`mb^n!f^V3)Uc7f!0z+Yr!Ra zNPv$Bqw^b(J0H*CU*eWa)F;Z0<3yKkb{E}jGCDd+xR1^Eaw~OitH5n4<2KegG7h^Mc=~o2AG*0mJq&i(Wiv&-(7*kuPW^me-IU~snsGx12 z>A)`j;ky#e3|%Y#8)(CJCi-5)Z~~o_+pXL;T>H!JPvLWXK`!Z&B0{F(lp?}k5o9U# zC8fUN=>P(EI7J0Cgfx7u;aiPxf~z|`tlsr0nIk7X4ik#*CO-jCrrb@SD~#Fq_<^u8 tfubsIK=U=EucL7mp|SAU8RW0yoMb{&r0+6DX$1r6s`(K=@!W@>{{^$vg7^Rc literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/domain/mapping/QMemberPrefer.class b/build/classes/java/main/com/example/domain/mapping/QMemberPrefer.class new file mode 100644 index 0000000000000000000000000000000000000000..a838cfb7e575f66c4d9b1c2a3efd474aad6c65db GIT binary patch literal 3784 zcmb_eTU!%X6kR6?P7((%p=z~4)p{WlF`@879i=S&h3N>cp3z7S@gefHXW?c4eD@85n0a1uXh2ng)UIQgV? z$IKUVRx<14O}miHo5iACm`)B^`5Try;#yOd8$}2$8rJC05Ee+tYqw`DcRpLnB{Pm| zCB6BgRZ5PS-pr8YnOV~_2h5D;xbp&QryO^}bZzrS&JyVEOy4x;%w*0a#+c_4Diu$! z#$YOfDAsDwb+lrgKxY%@M{B(oXc-(H93Nx64S{4J()+=J?UhndB5lyI5ix-^JvL>h z1k75`dvj)~lxk?MmWak$^`P;IwRi!WG;G$f1uqJ0Z^nv%Hf?$1q+Ot`GhRcg@0zr= zO~*^v&J0kqk{0qt?PiuMnq;8^FKgJLV<&bA>}hnVE({Vzv;oHznCn~}PD8Ca!%eEB zUQZ@(w@lt1fsy~&g^4KkVS|QF0izim{RPkV=4BO}F-w*PqfFnjUZaV;Q%H_VCI3nk zaqO4QcM0rl?tCgfAv+?e;~)-^_UonDqD9*MBL7b$wo@EObR5Mofk?)+OwY=m_83^x zeDqOm+|FAvHr0_w!ZB~SyH-|U(+aV~uWA?)*dfbgSu#ck>g+~wLC1(3ta4P2xDM0k5igC4 zvJyDA;*CS9n>2n!T+(qC69T&w56!SsVO(M5S=Fl;pgv;|kv4 zd|J`Iugucuz`Ht3IjOb2!HfO9mQklyFs_d(} zk)IOSP_nplaub$YvYo=E!9D?Tj;ZT)3MJ1hcoSxB)@tE0MAsjG1=#{)_H@DYW?c@{ z{-zaF+X6j)$$IRFWZKD?xyoVc6n*G!YGARTy@jNYPzZ1Uu1>Tea6X-n68<(JaQutDzcRYIvV<_8cbkwJuEj* z8Twq)n>`72+#qXywfM!LqUKm=G+3n{&t)ynCI~Z3^&Sz}+thM(?eV!FH@;*>zG?(E z))470SAmnuWzXdp%W%vyGq;A!qT*1)S4{NM=u{{gz7g2njEsuQ0{3bMkh=X`{;ZCe zhFbOeSFzrc$(5f?!A>c--1Kt&y6jQ9t1X!5m^15UtN~lTE@O35;DBV5j~BVLfe5zY zCT>9>$FBhL{N_WF|8JG!g})o+CRM*&iqvzIUXgOnQzhqqsmgCt&N-;$Tp?9?5o`EA zM;b9)o(}Nw9N_OdBPJ4$5xkGcBG&&(NdP7OjjGd5`Vxo7@6En8W|dF8hdI1Qi+6a| z!dDf4r1>rcmHBD3s0-~z;tAULIDdkzmA`~~jP^2Gum){Ew$s28T6-0(9rL(LfcFWb z^B0hk50>!fDe{T=Q28-NbQxxUIm}igk*MIlvOLOzw0Woox3!AfijVN|63R!kD5Km{ zwtk-0gOo)iiThXJ?=J!CUPnQJ8W zcP(PC@f7h%V-bl3959TBIPegM7x1cK#9oV?c!bmfUN4K!ETG@$iVZx%n?IxNDbkaM z{1{%u=r0I~1&s6ba^-ZAr~KgQTmI=aNmWRtXct2PpE4Q?vyF-BU`Pg;IEE7#LpN?C zr2;j4Ppg5t_!OU!HF~c?mPO~Pkb^bplvkFO^BlHXx5YiCU@TG>YHG&C#J>y}$ zG@x|S*P0woDq>rM1VEKszf`_uNZ;Xm!pc%fstf^b_i_CJB2N*WjNMp7_5r3P3!IbApz@H0N5XJ=LyK(ksVn6WD*s8FMkApmYT9x84cb0{xP1&Ks*gJk@H)ekBVEBuht4!8b=29f9t`XiH(^mB3f_mpaYvq8(<< zv<25>>{ZgVp_H-J={ObWEqLQ|H8WN8^74N%gI|X+uE0Z_$5=4XLUP_u=$>!y2Uvi7 A;Q#;t literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/repository/MemberRepository/MemberRepository.class b/build/classes/java/main/com/example/repository/MemberRepository/MemberRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..a856787a9e2238a83306a6c0488d2977191290e5 GIT binary patch literal 355 zcmbV|J#NB45QX0YiGegUTq9dWLUNKa1u{Z{6AbobwZ{9S!TjWE6gfZ+6=6`MSV%M! zGb2s$-uvFq@9`VJ8=ew$6ef9anh)e+#acLqjje-x=^48f%i{JUK~G^+(vEaR-st(N z{>d_?vj1Y+Jr@L xWc?pq+VaSPH|cw-FkFVMmC0o+vA3A$v)_CgtcxgKLB zO_tadIOSwjACn9AK9M(1oF3GIGO0GwnBqFp4}rvo4n0Q2jkyZ`_I literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/repository/StoreRepository/StoreRepositoryCustom.class b/build/classes/java/main/com/example/repository/StoreRepository/StoreRepositoryCustom.class new file mode 100644 index 0000000000000000000000000000000000000000..86810342cb1e9ae23c4c1f5b86951477f63774a6 GIT binary patch literal 412 zcmbV|J5R$v499(;ZD@IjnSmJ=ZemJdC{m{&C>fZ|#Y(TbM|HVFG99{Hnq{)97Y08Hu!?l zpljs)^M+Iua8`E?tyZf! zsoPkv)*Z#QuOBd=rAVO_Fk&SVFm4qeEMQvc#$il-zWR^Kyxb*HdyCo)G>RL(U{?7Q v6fL!3fzw}<1}c~RYZCzi_82sPU`S(_Kn6Ki(+u|ez&2yc;D84Yzq6w+qn>i7o6H2qF-1l>>2ZRf9C3F{>SUcZAJb zJ}F7rvMZ@dFbPS#3p^< z_{YV-bqdNC&Vo{|;NC)2x<%n9z|d`@2fYlvbJCOgE<;ypYA239#4RLjyak)#wh1Jj z@N&f!jxQ=IkXrf2PM)4(yW@I={26)z2jB*TS{ zo`l!qWr~&xqqQcdk1HZ@Os;wDOYdNl>ry6xb9mdru#FL%XSmwV$w}K7V&W0QVk-BL zA92U!-hs2R_fQmcX6n?FBZ8NnRD2NxQh5Y`;i8R87$t7GS7cc341UuWMOolloOn#@ z?S-t3*%-%!VcFd8>v&nOmiL4o^3r|pM<9WB@t%b%Hm>3t!$2e1tgE#H(Dw)3qn zd0Oh@koH%qr!6)?xrN&nGB)OLhhgk=D0K0UOTt|IYUkrmFRGwgsVHANAt4Jq5Fv!m zY}~^)1L_L;UaZG%oSvZ#v0+CWZvqF#FU`JPLbWKI>hyTg5H z){(JWmt;W6v`E;SXJdpgV?sB0il8zKH5uzo#Ska)sLKGu<<=5DLB%O@e_r##;To?* zcn8;nE~(-s_em_Z@Ckc7FAqGftEN`A{ts!b$w&HKm+!j-A^l4IwN-Z1l$og=ng!cc zYKgK~@s4C5iRXFGQ<`hiOM;rrxvIRU4xMG;37^EUNbwVSRrL!ZE6pXH56^8(9z*b~ zA(v)H6nf``z|%S9A2>n942OL~&12;sIsp+Rlo1)H5ix^FQkF&1?kr+R8iAq7nl$r} z-Z8R&ffaONl~#Y!yPMvtzkxk?j;{6TmpD6Fj>n|}9+1^P`zQE-g zQpQehv&OZC4`*ul^bg#s;qFfqtqWh$Gff%|8ex4Hrjti7ii?<_VR8dwBoO1&q!Wa2 zlCX>+7y5@tu!eP75hj|b8-&*U8^3$Kw5gZQdJqQsCVYO2?;`8>z`qUrhpqqs literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/service/MemberService/MemberCommandService.class b/build/classes/java/main/com/example/service/MemberService/MemberCommandService.class new file mode 100644 index 0000000000000000000000000000000000000000..c48d25a3a99181b8f5157e942f779ba69b1050a2 GIT binary patch literal 427 zcmb7=u};G<5QhINw5Fjz8QD94gz&~vF||S}v?`*!fRmgcQEY?l7M_iP2jHO)rpZ7y zSbX~J`~UlVpI`4E0IqN>&>>uAR!e?U`nh81*=>r9<$`s}Zq-r~tFrJ$gKg69`DM*MOdpn`o9LMaJ3ec*=T@u2G~MGk zZNcHm=6A{|&4HaK2v>*1xhuPN8DAF_6HaP?Hu1#|EMYJ+hTWu6-m@1tAe{e)QQ(L$ r`impdHUH`n2s?4-0L86!(TiF{)g|o3(m{WFCfJWPiH`#uVu=1Xo_&0d literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/service/MemberService/MemberCommandServiceImpl.class b/build/classes/java/main/com/example/service/MemberService/MemberCommandServiceImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..5203e7f3f3207f265f591312f2c0096135691947 GIT binary patch literal 4581 zcmbVP`FGpK5&o7sU{R>WFpg5yjqO-+qANihC$1|xu5HS4w9Vb-XnJ2skECsm9=UwTeXlP+_vLTu>ns403k!1O=!qn-yE8j8`^`7A|NY<9 z{{VOZSJFtKLqn&IE_5>-D2tlGA2(}tn;T`}ta8`qt}(-Fi`>mO-x+rJA{=9QXtRda)CI8ZtU=LY84?e43%#^IdM%7{wxMGd``!1e4gRf_S%?T3>`JI&TwS-y4uveV)AqXd$3o-J{`AXKZRh^ zK6zo=yzC3tqe%HeMwDSsQlwfd1LKEu9Kan6S~*m}aF1$ZWJOyhGSN1jC8M}_fwm;u zhB2aHRL2;`8OBs}T#MBR2W`Y=n}`i(Lc8~?CIsM6BNGf{!Em<@1NV@>X1UDkr}bxErAFULA*UAH||7+*4+GnPH!5$Y!CDQV$N}3mT5-_#!6A0M+*! z0~$l77NqkWuM5wjlO*U)#FEl&&9u_ExpdP2Idl{cXgH?hOE^x*Q!Tp@MGT#uxyl*t zh+?50eF7RZoMaeKcZ(fE8k0DsVM@noJV-tVKvq=JX&$v4%RfdbGaSbEjE;v;VCb(3 zQE5_$8l|bNqBNB#U?dL{j%QKSa8}2cF~@Lcf)A9$b&HT6l57ZBh8~amP1@aaT?m$X zv4Dp)lyrOrUuBq7_fSqH*}^RhC)%%CPUYnKbcJDf>r)D-wpf=0X4=G*DLkU%QGAUe zO$^PjH^vq%w9hw)MlDK_G`@lJ8osH+#3E66n}eE48G0#mY>zK2yJC&uU}E~T6egmF zeAuf-B|?uH5e-#_qv|5FZk;vPZDCfZN=hz}B)v>bZc~+1MIQ{udaw*j!v!5Hu!%^v z&{Y-{Zg{@wH$3B%>k4;1cqX2oDi$Zt=T9u0I$fMQcYe0GaDJ-z@a!b9XAFyqU0dj) zsB$U%_(tY(usd3+AFtBiVu| zn|8@`E%_b|cKXW}6`P|mhqu3XP+W;?-LMs*Lx?H*#D0a+&f#lK(|5;&V~mp{mZ>U4 z5SEyXQiy|s(&AsW5cS6$U#~ZvKXi?FJPHYz%^f2GsFF5Q8{b6W{p$( zN5LPMYdF4D<0Z?p=wwbfjv#~*_-SsCHd`@W-!y#JbUZWcTo&5TL;?&?#v!M0P#D@a z&u%U;v6w58YQib<$-}vk67@5YAJfiif+yL6EozHm#W>9!?otm~A;WLB&Dvtc9BKo2 z=w61?ad+ZCh}j!WB}QACq}PIK+~oMg_Bc^E(X@j>a<_|JK{!jvEw>saa&t$y)iXzs z4T@zTpSTnCL&u58RYFjBWLxY=+otD5!!7eEOQ!#AAr$hPn&Z2rLsWAL!d)`Fx=W?8 zD#5uX+!f+Y?sDN%&KOZYO?opYh487VH0vRly}oYzDve*`HyVDc<9GNy!~S-dEN4}$ zaH9|$HA$FNf^pCp^->D7-#%8WUL+K55E8yOR1jjNQI8TZ2;sah?Nvu&f(vB$r<)A7 zyuPej`l4;~rftt#KF?)vysry?NK*^$8&f- zgE#4dmY4;JXdNkK@HWG)X6;v6u^egsyVU#-9Y4V<8N5PSG3`(a=55pSxToPgh9MPc zTd_9re00y$@F87iH=S_OVQIKTSD5QBrFJnqS-KY;rq+_7PJK;QcH?vt%*w`*e!FPg zMK?O&(c8zgqKkf~#;$fqaOXtlK(f2;meLHqxKL#))?^bjx8paWfqCvCwg*#&v zYxG7o;Bl;zbzL}tZ{gcy*#VON4!%n|$LLP^J$mZI6ST6wHTV72+z)8(hcws4NDc5L zeY#26Q}jzzh^HfmXGpYz#`;DtBR@KJ5%-UdU&Qo#G?WS~mqMURv$SwuxU^+qUl2<< z-xowP73|oPqTvh;Wbh14Nd?aWnY4r;JuvJAiK#Gs6i3*6|dn>!PB4d2L2X2y@hx1 XPyCBk$u4^b-o^Xq!3VgA%NY1Sje=q2 literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/service/MemberService/MemberQureyService.class b/build/classes/java/main/com/example/service/MemberService/MemberQureyService.class new file mode 100644 index 0000000000000000000000000000000000000000..18497dae05024a151f38f17f6f4fe6f65b544ab0 GIT binary patch literal 151 zcmX^0Z`VEs1_oOOc6J6PMh27Q{9OIiip1Q4oK*ed)S|M??9?f{ZzE__BuF+2sAWRT-5u-!s&-6m8LRZh~A)m2n2%Rfi+2)229-mAT z>=4dPT`GRlrA z#Z)`%d22?^i=7iLvi}ymB&6fIb%t-PuX6O$<=?)}{I4-UBE#^DWXm{2cZJl3f%tR@ b`Vb>PD(bI+5PPEC%{i91FGM&H4bWQy6|-8n literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/service/StoreService/StoreQueryService.class b/build/classes/java/main/com/example/service/StoreService/StoreQueryService.class new file mode 100644 index 0000000000000000000000000000000000000000..6320155f5c6c0006948fb5facdc6e39384fd4274 GIT binary patch literal 795 zcmb_a+fKqj5S=ZT3X0+l{Q{#eZerpSY9bFLL=>=Ju(m^4EW6Ei0r@o_`~W}7I1~ak zG0_+wHqFfGp3CgKf4sf{z%?AX;4rxG^@!t(7{w9t1kFVH$UUnKdfB2kMl)M>T*x!1 z4#h<9NT`r^o`&dK2Bp4KL3)+J$!UB2LtCq`ezs_gt&Dglwo)q*)rsdG?LY@zVZ;b6 znuLKP10wTesDvFGWYG8(*;P9mCD0=w)gnp#hJ=n+?vlprfy8dftWP-^TxR(_Yb4pt z*l$K!*f0LuGOYW1nsZj L1CltT%7NM^);#KC literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/service/StoreService/StoreQueryServiceImpl.class b/build/classes/java/main/com/example/service/StoreService/StoreQueryServiceImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..2fb2bd09bc860cd0fabce9d9cc663bd60378dad8 GIT binary patch literal 4109 zcmcInX?NR16usjlRpY9S6S}2kNlRMdG{NjkTqsST)ZnH|N(z*v6MK@VktHL^DQ4gI z9m>vs01gz|4;(&o_)Q${NOCMY2@U7K2SuKzH}Bnd-!hXw{<`!VfV=QrH&W;@&}pIz z>jZ8qxs{xHT2`vI%K6G$v`Q*B6}X<7N-mDqlvj@>1?md)_*&_Ns=B_#Uv+^yib-4E z(wE3wQ?q@Y-+=Y#Hjp;40cIPdwVM%GKWjPV@p_>wFf>#=D;H(Xmd;%6=*(GF3i8=V zR0}LSceEN)J{><2B1JD^K9oq}8dwvz)nn z!p|Ywm91`ymLKH%NPM4(E3jE$oh+49H4wOFC<$k_=9Dy`+=T1+wTkkHYb&-H*lwa9 zI|Md`(S*>oO#x%p_3o3Ud4Yi#RQPeZq3m=TSK=xISDUy70|I?bQw?{!1iQn%Wg$lPLxJnPJ<@)V6Q;NQ;U{5*UYp)cD0%~(WaVDV+dIT!zT7&M4-2s zzJe2|IZgk1%L%5XT~ow6lr5xjJ#q$aFmWSp64>W@b2-1NlQQeciaO_d3%RlkWG=>g zOwO@hpQSSJy@IjEyoJ@jpR;u;~pF|Fm7T3_qM1{ z)%`$KsO8qk`gXRYpaH3 z824Ep1d1k(U{YXPMJ_0|N=XK~O?A@*(h2-FWAV*r1JeRGB`aWU^HZQ(7eibJE#VhkPL$+eXmn^^pmV}4v+{e2mZK(X zl^NxolruIZeMPqE|H%D)GD_4II&7(9HslGa}IC zM>@R;)X`858_*_N74c5cacE03m2S7TGFh)S*c^!rF6mwd{_!LSF}h`tl4;g6{W3N; zazaOAB{~2eO!^3UPI!n%CQE58!;O&}VKwTLv$M)E$(C5bnkHBu`T{#vPoJ&^t)!dOLaxUXotl^J&-cfWF!Cj(U`3A=1rnJLS`)p}^~27#+u(YKsF z+HHEut$8JN$kGF5M;KB274Ul9fCBw7!08p>4Xv0|9v_}^19n#~zEKi%hIg&N4?J0o z#*5#x4zH&18eTW>hKV=vmcZ_2%UjN(yP$H#FjDT2v$7Q3LN{y5I@`i2Mc#^=A>TCZPx%}t7$-^qPJRxm+$_i9IgLm4_qQ-GKO}5@k z^D6efiD&U#2G3FOQ5qlP69b>>Q}Z){!DaMCkwypUp$36p{{NK444+QSm_{TCQG597 z@j35+VJ(gg2m!O;u;?dj>HEqz@Rh)xWf88FYXjf#uK&-fybVQ#fn8*EjCYTR`0msH zGwIvBzVGtgMfoW_j1D}))d6ax_}(!56U4rYFjDxQ%M>2v-*r?4cH%VuZjIFN7#`<} z8}J04+H%m(UAb#Fi9BwYQGY+a|t& z0hrj0Z5Rx_4o91py!N9E6{70LEavFW#74}+;@-2|ZSq?rS)k+$CEY1*0hJs0Y^qe? z@UxEpJRNlLoo&W{0Xu)ku1N~69UZxV>oVzIF?ta<$1Y}W51%?e>GVGXWYW4l z`CIcfM&o*0=0_YD{uTFK!h^sC9Bp^IJ9MklLESK5Fs$dfO5p{($hWrs65lWL>7(=& aLVO$V;sbohFX!s~!w^5TPoFpcEDbmEP0sSkrEjl1;1rEKh<5e}F$q zoGp70^il$oc`q|B!<(<~k52$+*r}p`r3#8Qlu#CEjMPlYMA@Od?T;u90_9U}bvPGT zYVY?dSQa>rossmS%p@V1lAr0A{jdDe8KdkVr@CBQK~>;r@m_)Ar5lhyJ<^tL zrlwE+LG=@6nvsiD(o zlsMCOV|h)Myb3hnmg>Em`k1bCHdZS$^!s+h zkEl;ZU{d)}N4g^t$W*Eg3zGs*9PQckNqT`xwhUBD?z>v{7;-3xl=kg`^m{HDyG>s3 z<}l77j|&zG1x%qRuyO{6qkCkBk&H&6T{lLXtt1vGw(IMy5B2w}^;WyFxgqel`F|9( zJS>z7n8B>T#53iq=!HPFau&@i8B(HPl_k}xojm4n(ZYPpa7mzaWY%VPmz*dusAFN_ zgh3&hJ>^j1#n!R-?TE~N3N+YC3ya*;@t)4}r9f_VK+bT@m3@KvO7loo`i3lBAR9L! zFx^x>ZH&AwnYQe@jLbH*Bi)WPD$Y|d8x2$_@bn*R&Z8#oqsG;C5;f&h#0X6Bi#o$~ z8KlKZ>l6)iuO*H2C?dm!7vGKiNO{!o_f)7@*Gu2mJO?~ld^+27wb#`{`!)GwWJEnK zncvbQ%Y2K35I5 zaGA$J;0pgpW4vF*HQujtwv7x&z})gTi0o$+f56)QirfLFe|=#*gB!dSd5_mgOrwkv zZgMt%_#JcK=8PF|2X~qK9>*DoGVXIQE*J%)JcMaQn==s~Eghg7ml#V*OeA0~p)MR= WNU0z2o%pnp+^r_-5|&f+A@CQhaTqfI literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/validation/annotation/ExistCategories.class b/build/classes/java/main/com/example/validation/annotation/ExistCategories.class new file mode 100644 index 0000000000000000000000000000000000000000..d239af57ebc9f10de0d7e93d26069423d9547af0 GIT binary patch literal 921 zcmah|O>fgc5S>lhn6!MfP$&gTQVvxMQZ0lKhX7JYTu~{dkrR5!Y3nT37TX)y>#DhN zK|%>fB5^_>A-ME_L^zZKKY*W7JAVN&PAXy*BM$pD^XARl+1a1JzW)G#2e70-iok6{ z*ectncFSVw9<_LrN-i9gI*yQ|t+vlSS)!7e!sX0UV1mHRF5RQ5MIBS!+Sz4>R3Jkj zH@3#&i+`vHC^qvvYBBo`>18 zHEudo`YsBZUs?SNa{uN-L@6!WwghbwxRZprg~ZRPD`~ub)loQl0=k*<4KotM5`m9@!b>ApaXW?Q z9DFz&y#I{w;1fE%&Y<(H-+kTheq1GxbCnER!7xuFk!W4eAizBN8h3rFLxrWxEw7xS zJiPT7Sw@Stg``aa_tH4GQTQcQnkFBuItp2f;wNe{R1VwV0@F;zZ@3zDPGH^+ea$_# z!vnr6Sll|+y_hIE@t9@lgdX!XYodH1E&sao1Fb0cH8Lhoev>tyv$m^xK1i_(mvK!`2gOy^mGMK#ykEr#UWmQ{bcUB;-5O{;=?zFM+N z2wFCQV!DFOGz#EMV*Jv7C{-!A(?+6UKYv!=+_IJk5Xj;h$C=OK^crvmy?o>aFoD1% zoQ2E?XdrqHR|d}G#Z=nGG+xdODHq@(?)PB~W^uoSqL&*$9GHVEc%E-SmcdoH7Mbgj MS%4c6&Y%FrKP&wX=l}o! literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/validation/validator/CategoriesExistValidator.class b/build/classes/java/main/com/example/validation/validator/CategoriesExistValidator.class new file mode 100644 index 0000000000000000000000000000000000000000..93a014c5f86f69a6f81424e415891610066c8a54 GIT binary patch literal 3702 zcmb_fTUQfT6#h;G#w4SpsHh-XDOw1~V7*m?SgwiCaqrzhOX}H8sFfC#qAY? z+qU!q$>GXtre`sUqljxr=tx3mIPOc7J<~F>rt2{@krBa*4DH=Lfja+VuxrfwA2Th4 z`nZl}q!=1Jq2!)*XY;aXh)rHBSt1HN^g%ktDEGvQbWGunZ<4W!ADO77<+7dk9iDYW z!OW9LCW#iD&~Q@6DYP=2u41l%#c-5c))e>hs|*)IGJN!PboM+=;tbAeXw%V-a|~DZ z$2o<;6Px7l#e(VboF&G@GA~#%eO4a z3r1cRgyB-e%C0f)IMSK--^tsFnVGSr(cy*h`!jP-mZoPGmL_H%O^-1Q)G+>TU6}+y z>C$ltmx(G*QZP+>h2i8*r2WJRc8T*d=+@DLG$mH9Y+8jn9zHg`)dfKTrzkNzkLF*f zMn!f%sT|VURmaGPGAV0iFhT(QJEh1I_?&2Z%%TgA?+S-~ECFz=;bha2K zY7)e$d@&~K3hc2>KHb7y9YeUspqZ{;whSZD0#m&sbFffndY)<+CXV;;Jkr4YZc%L> z3eTwOlvD#Z_iQ_R%lln$0{1mM&@qXJ3}aCYhvkX7u~2Qz9od>JFr123LlAs&nfm1@ zRXRg+*0jZRxtJ5qf@&iSEm@i8)*^RIwGKBMyj9a>$kasgK>0z*buwSMJF0g9!?nGX zzJ)qU=_%o@%EByncu{!5A#_ays4VCu6}d6|l%Rwm+d;!L4wxSdjOc2uWo4_h!%XKc zTZ6&c?_pVKuVjYE^JCOS^XpT*6w(==H&<-xu@3RQuseb4XgDBb72nC)j67^MQIgUf zJXf|ovnVF*4bwF#E2`lmwp+56Eav38abMWNp%z>qkH_ky-66b4S-hAl@UF1jyQtxw zh-&s3R_-?Xv9E-_NyV$$N@vAzOX><;R;BPlI_q?S3r9$gvXthvVoBP<_Q+~#L`sil6ZiJ_rdszoZ zE`=O}K50{Kk6PSyRfB2Udp^+clHpR-(Hi8nd}#QV;r!c=QdbMeqp|H4UFwV`bSgP@ zThs8{MDKL}(B7xC8lq=R?WTKQgZ)BpF=Xj~!rwhbCtEQ^>(<~DrZGb+rDYbMk)}C% zZ)CIpE$EuX5nt_3bi9G~270%lF{Iz%7_g1^Vi@Z95$%23IL*-aD>`1`gKc~mqi?+o zk2`)QnFb#~8<_ywphnylbP#~^IEM@9N2d=c9q6wB8o)dj2m{%~BP^2r7LpjkV?y*f z?dsvTc|4)Fr?f*v{Dc0$g?Nm_L4v?D`itQUI&=eHhVJaJlt{nE)pYOgxLIXN@ku`^ zA}l2;pb|dk6_)NGh39lwi7WxBVZ!$n8B>9{PNt5~Gm-B76G!`AVNh`q1S2qU%r_DE zv13Bfudt^GdrB#!-(aD_YxGo+jVpzpyu!$C$WeXq5b{nqNmooIG67ZK?uELN>ECdZ zLOLG9ZglMt0+JO1lE|Y#N*Y621(toUR<(Em%HTqM2trG(dTx{S4?X-~5J{sjW No8s8QH~0=`{{yH@FA)F$ literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/validation/validator/StoreExistValidator.class b/build/classes/java/main/com/example/validation/validator/StoreExistValidator.class new file mode 100644 index 0000000000000000000000000000000000000000..f11abcb1557dcae86eb495626f9155839f8be79e GIT binary patch literal 2775 zcmb_eT~icC6g>?K!!Dz`Zaj4`kv;|I|st0W4jBrB+kn2SY zzmW1JDT75GQhCmAN~LmoW`)_*8lfr=(A{^t@4bD_y=VH*zkmB3z%_i|iw<;J$k^yY zx4_w_a$N?IbT*``t1{BQ=S=%v7zI*$(Nbdc1A(0Obfmd{t_04El%C2B>A2Ecb)@I{ zQF8M7&a^nXltmA+7IHRvVGB%F{F1fTse&CcNKTxyJbeN8NC^Xi44Hayb zRj{Ee3_n>)`wA0ta=f`GS)@-DdvOqb7V$mnt}hA?d5JsZbxT;SZ^ z7$RwrdKL+ss_Ia#xN1f{kqtLWk*R$*rYR0XdQRe$h0`|P#~Fc%G#;|9@5)WrmsO|Y zSCtcz-$v-n27w=xX-I2O*^xPXfSxBoB40t2$z?sftfVr2G_KOvsPM;0#IxMGSazuUG8D^FF0 z_0oOSboP{mPXrF`{%k5b#||#qxQc6WjmByqa3c+CT=@ILv^ctK;WL5pbj79QC#5H` z7{vW%Qn_w4>xMz0rO@7Xlu{&+nPwfcXiM5t^Nrey3KmV1upvu+MY>Be&}Q8zqVJVpZpyat@+ivGLSVDsen0kF?NG_=TizClR%0X zHPHZPpNy~yA{neImc!x1Z;L`PlYv&4HtVmUI^Smh)s}l!{Tja|i6R%L=<5I_q_TcT z)|+TwY2|Z|dTv-9zTfa7T~l-3h7L9P+eMpD^_N_~w&Jflx0I&>NBf36vqyZ-G#AN5I=L)ff@eK#nu7tJc3!S2a;X5iCbK8 zKW<}=p1$C`i`vUU7@guapMc;8890$-xU3>Xo2Fwf|{ z{HiYCE;@0KR-3;imix4nY3YIZ3*#0a2j&Xd4mtpjnrmFaA~&Vc$rWDVQeo^@Si1;y z$Km=?=;U_N$;DXjpwo*y9?-QpvIOL>6RC$yq$U}vlfUH(V}Ib|@hyC6P)JBfLL7`k zm>U>c5&~Z5oM+B?Ff8D< zOyH^?WYG4N`&2b4he>37Uq$YQ3Ysd~QgKqxlmZunR9!bgAVY6kMP1!e0=F7Rk>Z}Z z579U3OL@=Q2+pAFpi;#MsscA(4Mw1{Z*|56=IEPUOV^y5TxWLt;1evX_ijpi@OjJ)67)^{tXZkw6JxgFKPbz;( zoLsH_~(0+L}HohCtbb+nrWR#WAZk z*Vva`>H0FDuJcVfoZ&z^%?+A<)Q3Qrpbf}Y6fq}XCU4cPc9)X>F z4vKO9Phn0VL-e}w*o31E9jb3TwrzK0)2C**{N znw->ot4zn_Rwqn!pmuevncuZAG>J?!n^oXO!$f;-+>Ug(_ni&qsfiBK8Pn9E=gQ31 z-86BsA=_;l5_704{SG4)uE3={{?1`Lf5sHs_drI8bm^qM^k{e2ZV5D#cg`~UiY&K! zmA`GgLxR`xb$E$^XK%xFpW6MfdraoW8@>se=D@wDLKVqG*=Q=;rW3W)U2WTX^0?W& zY%igm#HY=Bezfz9mvK$6!M{~I@aePUCVEyGxk?(hcur{uW4PIO`IO%Q+~RKupQQxHx%-@Q ZEhD+YKO|uCN+j?VZj){ucW@8oe*j!1k}?1Q literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/web/controller/StoreRestController.class b/build/classes/java/main/com/example/web/controller/StoreRestController.class new file mode 100644 index 0000000000000000000000000000000000000000..a9c5e0253e663d9189fb4ac7842cfa4984efaf88 GIT binary patch literal 2901 zcmb_eTW=Fr5T4_NxN%IlmO|6Z($bQIkWIM+s3A=nZY~Zs2~8jRbYh=63-+$NXYGKh zN<~c(f~cr!QbmYVAZWRWhd@COfBpUY zpG0(kPBc@18iLdqrWMr0s5@z8b#aDga~Yveh%r5BnT~B`GQ!qJ9LpBNLOO#L9-}o< zaZluheRf3H1tTdK?TS@fktKFXy)08As&9ok~%yguRj+%~03p>&gv+T4kbGBiozp!~$Oj!15J;fcar>rbD zOg+KVA`+rjS{0<#VOm3L8LeJ493ML+lDMsDzhN3qAESo$j!{O@`Yx}Iljn>CKbx_5 zN*~A>fI4THQbZUv4q7PyyDDaw;&?tgChU`ZECbHkn3d$2QEnTGE;AdQaYHidsY%1~ z$;3TDKbz4M;;TZ+M-EQpfCHm-Rc{tBg#3_j#;sI>D+C>3kQ zPT2naKKl7=mfL5cRlNAryEdaepa16hgDG!rR&#&7=RTg-+`D(&>vNiSeZF{QN*hQ- z8MUN@Oxi|H1;Oaz3pCvyZ~A6@eQ$2EY@#?b>t38zhP=6l?w$EAt@!;cj^3>qB~-k8 zuQ+qNICICnbiuuJvs?R8HM%z9sAkc;tIyo)S2a}@n)~2FarTM(%QMZp@ywfi;$4|$ z)VoaZcDcf3b-7C*vHQO$LNB~vvD7ckgYluE`0*V*J&Z!}V_ljzdH?xuk5K0WpPoG0 z)3cLN8&4*Mlv?rpwc@#XAD9LIH$zU1KVhP|w=d&SR-_EBtH}s)c+w=3<08u$b=9Rf z;!8uX)lj213nPA2Fxpa6@GqPY<%o8nKY3L^ntN-?y)jjZxR;Su`~L22@24M-aZP3Y z+jB@aqt0b~UhHysyj+D>gdy8#VmbiK#k%%pCROE4Pj{h?oN=vC9%Y*M^LM49LmJ+x zZQ6>(n(pnc0SY~7V1}b7s@hFIbOw9D-(zs5x9)aNz_W!J`%;R-0u3V_-(e{3X|M6I z&dsQnNn06#s99KIaIKAHtn8R|8gt21<3yxzS!l${+evZQPb}+-G6f#IdjP_OUQZ=^gUJXHt zqtoh9XS9B)-9nr3KdKdfsjvprKPj97IJeL`Q0qY@r~x0M*3O5-wsk$FU;}-|=6$(W z@f(6X(fbspt+W9rtt3sa(MC|vqfPWWEUHr*y#eVrac&NPO<)kcg>Qh~h9c1))Ch;r zH=h%e^e%0|oA)HFZ|HitJXTPCZcWrw<^!qn~!-u`5Zt zD?+_WXwNc2dzH|>rG@CjvV;8;fgAfJB7yV)>O%l+0kA&8p&vs2D@FsQV;df8=wrC5 zVC{pP0xs0~m{xXfdqnI$r~oNQn;=O@fP!;FNvZ;8$WIdUL0o|qPOE9Kta1>~20Db_ g03G(>+yMFr=%e^XVYCG6Cv*&S2y~2&Bfri605}MyQUCw| literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/web/controller/TempRestController.class b/build/classes/java/main/com/example/web/controller/TempRestController.class new file mode 100644 index 0000000000000000000000000000000000000000..e3ba007b16c45251787db18b90e7a4ffd0433a02 GIT binary patch literal 2204 zcmbVNU31e$6g`{7QSB%nm^LW|TFO_Q1Q1Z5P=~asAz;Qpnq>Uar?tE|BC@1PYXkqP zooT0OANm9OqdGk+D;XIQV)|h3?$!M~=kDEq{{8E30Qd2vgfWa;n6Od6q`(C?>^kbT z>_)zF+%V{?SgY9CR^6z!e-fD1p^L_gSmE^xiF*vK2cQZ1*g!_;h3B~ch8>SE5K zTEa&tS}56=f-P`9Z!9BkL%#7t*>=_wr&;!oJr%#%QgPpNmB7uR z%9DXOtvpjn_j#M@6h6i$7Upd%;8UWPPhu1Y#GT}s{-Sd z#ioFz3G3QMUEuOtjdKKR0u!~cO|WMhUZ9@!x-AuN%a%_`xe>b3Z_3y+=S(=EcRY59 z^G-4ErMF64x4cdubuXsp=194%yc6TSjlaqur#5?m_PVO+B_4BL3xZHfLkm;B)d=H` zlSHu>bY8@=t6qiiu48y;c|qHe2fEH9rJu?uq8?oq`qJ+)=YnIP6|mJl)hW#Pj;H!) zx%Z5s@5fJp*Tn^D66WPLg444-y*!`Oe57 zZ>pbr1T=NSP`4{XY>#qRc@qUrXIa&Q{vn)~8-Cbrg}bCQP_fjiZK~P|d$Ft5J=5e1 zW_AwGqHE@saS(n$Dfv;x2p?jaqL6Dhwplk~o7DqmT=Qj;sKi1|;7Wd$9XUR-hr_}{ zfpf=M2u$Uk4hxS3ZX9QmJ~sJIVXGP^c@d}83?~=BA!1$w?#8*lfQwu&@pOYH!PVM> z*n{;8w_~`>|H)LmfUmf>2P&vwk*B3pXBk(x&hX1s{;vH5k-*{ZI$ai0*H7qaj5_6| z-!Q%WCr*xGc@L+CqL={=oIwd^(@66Ji!2gtaT8zD>n&;(_zrOygui`A_&fN9-z`(n zU2X)6zn7J{n&nbj`U7W|mVd|euhhs_I-84MI*4CNK|6?l0(1D5h6bD}*Kw?*Ztkbq el<9Dl=kNG+0Lb@PgZp;ScK!x?x2w_9P?S4XmY5Gen5)%4po^q;A2 zQ$;V-Z#@;;t)1r!PeX0CY$z~pWLF7PYNx9-Y@|(R#c`)SoWl$k>?qS#k-+RwT-8|B zQBe|D@i6NGOHCcwyFs=^x5Kw-dMD;*gD`Ha7O_q1|BS_sO|7%Go(S7-cQ~ z2Ufio1Vnw77uwK&D8?1K+7zgX3D=cJuFGVU8oFbo?M1w{o2m1zp4f?4Y9TLijhH*N zVMz>~RKCxJ|LBO>>gQ3bn6t(=!!}nqSJOt-drm$(lKFE|30pGQm63LK-#KpgG!wc! zvQ(b>xJt33Y&}un+@iaUfztaL6u8n)d(|9fTwtXZgxzMi?>|;XMU+9C%o3Tj6TQxl zPzQ_siLtzEL`(=T_~<%mzG&WHRYjBOE*1r~-c_}{Y5Lst#6v>C`aR=liYzX;$4pV}D3 zHN}rLg#88fCPAgL{X7{Fvq&tsf-n^E#Ylv+;3`2*1gk<$1Peq?1gk|qVum|iWPhoO zTllhy+sU3QaC;v0!_|}jF^koPv%ccl#<2W8J3j3a*JhdK|7%)4TfuhX*544XlJIZ% zcf-ImzUALL3BVnEM@!&){6OgF?eIaJKL$X}9r&ZJ8pO!ZxZX{R6t9jL`r9 literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/web/dto/MemberRequestDTO.class b/build/classes/java/main/com/example/web/dto/MemberRequestDTO.class new file mode 100644 index 0000000000000000000000000000000000000000..e83ec1dda8c26d094718376b01bc795dee1653e6 GIT binary patch literal 428 zcma)2!A`b|9Q(h8kN5?Y{ zTZDdWQ^jvOeM(rpa-`;^Rkxf*oZs>Dl8bUQoe=lb*4w;upzFrP#W9TqxMh@*=k{g!WW+vRfI zUM{^AWzEnv?MO%8XXwc0*1C~Ew}oU1N04GzD66V1-t%hB74|z(vMXBIOQKp5-gDvC zl=Q{?>hkClW*6x9z&wqa9gZU62-kNib}5MP1K_)^dimBUG@amqB2XV z4F!hUsS3NO%G{l&H>)J&E%Y(mI7D_yWYBNOILCs~srVfJ5$3O&>?00h2vOj!yW(h( zPk?A%YUizGz)iGBVe4jh$J-1WANe!FW>}6PwJ7O?6j4;aNc8nrQ+J2CpvhzG+6NnNy_YiMZ(@6*LePu~u*KTl6Ky=6u- zwgdLL;c|iQ1^@&&N_PWlTrT1gts`{p!ZWhCjE)9SzL5f8ja~Udw@+ji!+xj%(ve9B zWuAhZv!sn1wDdmwUgV_5ae!U%=h%YO`4LL#Qn+1O|LJ2EfFwrLC7=-I)s z=#2!Nq$4>Q$JG$iaALU2?BadJz&D%*{so$e0F7gUU}99Q=Jc;Mbd$J2Yk~sZq-zS( ZB%LJEGMJ=44CYgu!F^gEU={@o{RUsJ7M1`2 literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/web/dto/MemberResponseDTO$JoinResultDTO.class b/build/classes/java/main/com/example/web/dto/MemberResponseDTO$JoinResultDTO.class new file mode 100644 index 0000000000000000000000000000000000000000..69fed804e174a44e1030825359913c8a01d20bef GIT binary patch literal 1293 zcmbVL+iuf95Ivilz&6hJDepg~THN)(AlJ6@$OzEt+6@L3>H zRRW0*;G+<;j!~KfM3o1xJ+m`s&YT(l{PpbzfalmzkYYIK2cFJ9nckVp^^e@rZ4u}l z?pZuM=FwT;M|{6~wD~4*e6okGn6X|C9oObz0Sp-pS>zaU&m7+oFBsCbdQU|js)B-s z1!xRU<|xRJ_hL$Io1tu+n&+nOn*KmH0)Nny1r{}wP-am3AvXoL_XNZ0C{Q>ar@+4H z?$b?|tY!ffWE9*Wurbz=b;|pcrdXqf7>ruon1k)4ScyDMQl}NzoS|emK0h2vg}bKZ zlBaq+^d-x-f9^yMx%PZN5Tlef9a$wQl@TWnVLqLwFDk21+16O$>YuuQ(U@VkHcjfE1F83D6df*30{g8QnjRNC zB$|bH!7%LeSB_L^Wo9cM%bsaB4tXRFf=DQM#ISX(iBT(UpX6-0W)yKMRh-yxhUE!6 z86q}l)hhJ&r0Ah-rW11S=*&XJGH%k%3R&xM1d#s@_Wly-&*WpcMQ4uQGWT}!y&B)# zK{d(L>0U-;8(*QwwA7WfGVYQ`8wKDV?vphMv=*0^6s`glr-7FK3q=3%45LddeVJlZ zyavz)(y=HV0!&kWsX;)EoeL<9-3t__As1uF^-*Zjq*PhzEtM(7il^{^zSR`D%dz9C e4rx4$d2V7Wes7~j?+Vq=V;glE6>SX~P=5nX2pQA> literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/web/dto/MemberResponseDTO.class b/build/classes/java/main/com/example/web/dto/MemberResponseDTO.class new file mode 100644 index 0000000000000000000000000000000000000000..90f55bbec082aaf118962279dd79ab6a7cee346e GIT binary patch literal 555 zcmbVJ%T5A85Ul34@)86@uO=FmgM0Ak;~>VUK}eKvpItgSWY{G;yXtRwGV$OC_)*4Q ziDnj#tv(y$y9B zZW0rV7Y8lE^*;ueWiAqJ#vBnUH$lKr*C=aQJXe>N5n4-pF@+sCa;)@`d^wlIqA+*P zfqds3^d^N2N)ppH1eGOL<~T38DlCh2i5b*Tms}9EfhINuH|E$uTZEfZ-9qsPe~yl0 literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/web/dto/StoreRequestDTO.class b/build/classes/java/main/com/example/web/dto/StoreRequestDTO.class new file mode 100644 index 0000000000000000000000000000000000000000..339d5f077bb89c42bec1b551688a16cc8f171386 GIT binary patch literal 310 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 Ia=nGZznTg;?*IS* literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/web/dto/StoreResponseDTO.class b/build/classes/java/main/com/example/web/dto/StoreResponseDTO.class new file mode 100644 index 0000000000000000000000000000000000000000..26e29c4ee189d94d04c79900f23ad7547ca51ac0 GIT binary patch literal 792 zcmbVK%TB^j5Iw`I@=%b6sHlmC7@G!T#R_n$|W3D|6+bYNVM#+)8jkkI~EqJpZfbCB}u{g?~IVT zw=8xlrs29QSCUyg4njU4&GQMxfGlnPSe61S!GhR_Ca=&RBvam@#JDhh#)0U`8|YPp z5E2soWgsaNNX@>Zf~&&9Sd$n+8X3U^B3MTb1r)I*{9wj4Y>Rn8N|pq3^2d%~QIuW8 FzX3JC+<^c9 literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/web/dto/TempRequest.class b/build/classes/java/main/com/example/web/dto/TempRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..6bdf2b95abf9d7f38467caa2f3dce83ff4e3939a GIT binary patch literal 298 zcmah^%TB^j5Ixfe#R}5+1BM;A@P2@g4GF6T6D90#%S0||d$F|2Z?Q6Q;Ro_xJ%s2GlC}QOs?gP&dd}9IH-yfEsZ8@k@JHiCgf8JG zx258pE;j|MPtMe`v1-oc=7rx|-bzm}u}dZlQd9A)Eig|3a`e`3(A z%$6`r|CxJFh+l16=R7rTSaP=W&K-^+BKgM|iOWZV7sAwu1L5r#XfJ|?SkRRLAD4o? PQyxm}3nN?!dKer5$@oHB literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/web/dto/TempResponse$TempExceptionDTO$TempExceptionDTOBuilder.class b/build/classes/java/main/com/example/web/dto/TempResponse$TempExceptionDTO$TempExceptionDTOBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..2c606b7a33b4bda0c95304b760f84c652d544f2b GIT binary patch literal 1703 zcmb`I>rN9v6vzKl3JbNBauEa+LAkV`tSER%#YFHzV+8{Z#`wi)JHo>5OtU*hcoQE( z6AcL_K7bEpJi|6p%8DWJ!_MXOoZq?3oaxVBhd%%;;9&wWv{;BI(TX;P^fuq+w#((F zy;|B9WzEp`$dQhI%+Qj_Zgij>9TpNvTtJc`Usj$i_PAGdh5b>K?21-)QFzrg5mc27 z#F*JU+bfHzc9eWtTs;TJg>8f{hP?gsZA zv#$%|ddnfw%fh*<@wduT2=Alw`=2h-uY}%GmDk+op3uUl99m1}=o#iS+4E;ZQMYRq z)}5i35XaZ%&uJvqRn0Gp=Z-07SL3~$G1`P!5rJM-fwnNoF!Ha2sXrE#(t-AQHOwdI zY{OIn)3|BjmbphW3}eTUIC59*2s;cYyjstBSu1~^;ZtML>xvbtQWNDmQ zQ`6sQ_)N>wsJ>98jw0oHe8a|pp{1Mn*DyjRCeVB2$HbBRj?~+!udoi#8SNyDHyIi4 zD6ZFeb3`+|gkc?0syK_5h@iFN2HD3jb|U8SBiRHpG`Ew7EPXa+X*Wn2q%eUyFn=y7 M+@*Pr@_K-Q-%!u7#Q*>R literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/web/dto/TempResponse$TempExceptionDTO.class b/build/classes/java/main/com/example/web/dto/TempResponse$TempExceptionDTO.class new file mode 100644 index 0000000000000000000000000000000000000000..8a3eb0d8ba2a0620520a1abf61032f83507906fa GIT binary patch literal 1068 zcmb7C?P?Q26g`u#O=4`**feVWNVP%|!A1O8EoikGNL#5P;Lq9QnoixF3A>Zp$5K!V z3O;}jCEndc+NO$TVRz=t*;x4l3X2fPl#oSEAoo~lWj6)Vjb^WaJPHnqC0s&D z;NjeijQh@)LxC%uLwO`!U+SUT)|Q48ZWOVAjDtmi^6BB8cSwCJ;CPeX1a=zD&fLU* zle)njZJ7ZHEOwNp-ErVi*p;5onbrNVwkn{uK2nk5)KjgEmGST*fl9|WfoI;kFG*7< zEe#mU8Is*j1Xj7rQx(4@#$~22{hka}OfqH4*aO9okLK6KoGXn#5H))|#T~K-X7E~u zG9XJKGZf#LaoDGA73*6%YmNtTvjX{DitH;BSqEzZ^?%J-pw!kZf6JFqL`+bg^_W0y zHZ^q_*4Rx8Y+%7J`-#696i~(zQmAlL=QV!v-yq(eApMc|>>U2)l9~#Zr~7JhvVz*Q z(&h6QHQV|OCoW5!DXZZsXG)U`xQ6Q-od;s$UjRD6m!KfoVlobAfj%S{o>!z}ijUl>+rs=H%4Stbvm~7Qj_~W! z^+j55O2St!O50(5tzp?!;W5M&z1&rvOfXsbB{Yh36IL{DeG^{u$akSs&J|@rsSWI7^3L5p`fwZ zl?|^V)-Bz%f$+pFXm5hpqPg0TzA|u!Vd`HDY4X>kRKD_fJ)q+EN0EzT4)X@?>S0-6 zNS{?=xks`l%%IF*e%5(KN$;59Q@F`3#{hJLyH#8G>7taiMm^uoEMz$sSURqY4({(m z{=s?8huhVHC~(`}wUo%mu*k4{u3Mq=xe(G@=QDG5I#*bhA+hPw5EpFj`+`1kUnqiR zH?(WT8+gbt)7G_4%`otoVe(>Ex{QL(VVdrtE;`1HR=SBuj?gYja+G9*9=gux-8Iro zvNCPSoq&BIr3+)UYG)vhaauKi4w=Apl3^$!i5uu{0_7=ECpB_&-)Q+vYCF_O;L?I3 z=T?1_I)O$@{e^!MQxu{LeMEV59f|KqzRP`uaf1HNNrHM49qXOOtrp%Ap*1;btW(gn ycM)2=16mJmH%X??)jZR*%_2iGMj5j7n7Bu~abl3fEbc@9D3W+Ua*237!Psxfvz(g% literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/web/dto/TempResponse$TempTestDTO.class b/build/classes/java/main/com/example/web/dto/TempResponse$TempTestDTO.class new file mode 100644 index 0000000000000000000000000000000000000000..7a1c4480539c25746b7359c0df98a85ee8e66f85 GIT binary patch literal 1037 zcmb7C?QYXB6g}?8(q`$pm2G^Cj}C^^7PLITU3{QqS^2G-pO+w+n7lA)A+V6{K zaww9CR*BfML0=^1dH*24e>RojNW?A}N*>BsU|4u0l{C8y#a4SzMFmv{u7^c<3=ik& z!{8d~cw}O!#te<#2|wk2$ko`N<#t>wq2!>>uzY@Y5S)miVQ_*OH->Jj-J7TJUj*)u zzOEh#hI&sbu|JIh5%+lzQfA|Ds*H@po;sC@q|{TTwBbgQah7(dqd>p&UkW8+Zp4VN zYGYxno4>WK62o%^nL1mmhddncSlUimyOKGUgu6YLBic+4YV zL`>N3k)Fmw@j_a8EBQItwk#Pc`$YbgPK<+1hUUM_W$^YCsqcn7Ndz@m%#9Pt%thHi zVUq@Di6)fMOQS>I5~^6n3JPdY)TGrum2Y5g&rtkGdxk6YT}W$OtY-VQ^kf}Zvr3=N zEo!;*8ICP0llLP2?n_>K}6YK)C*Ux}y*2|}U``=Ly9NMC7-@>{M?YfuVSDNLsvJ1?LCOVbDcmiC@ptLQ0hoWbjS8U_y!+Xq*Obu z$*n&3WyBLv37=)a(Co}JK4Z`x-LY?qI~loErn{a*vojRBA_(tA)H6^~WjLMZx*xgR zPE6s2(sgc(o{ANQ_QGX { public final com.example.domain.common.QBaseEntity _super = new com.example.domain.common.QBaseEntity(this); + public final StringPath body = createString("body"); + //inherited public final DateTimePath createdAt = _super.createdAt; diff --git a/build/reports/problems/problems-report.html b/build/reports/problems/problems-report.html index e69de29..8404bf7 100644 --- a/build/reports/problems/problems-report.html +++ b/build/reports/problems/problems-report.html @@ -0,0 +1,663 @@ + + + + + + + + + + + + + Gradle Configuration Cache + + + +

+ +
+ Loading... +
+ + + + + + diff --git a/build/resources/main/application.yml b/build/resources/main/application.yml index e69de29..bb2a42f 100644 --- a/build/resources/main/application.yml +++ b/build/resources/main/application.yml @@ -0,0 +1,19 @@ +spring: + datasource: + url: jdbc:mysql://localhost:3306/study + username: root + password: yejin0618* + driver-class-name: com.mysql.cj.jdbc.Driver + sql: + init: + mode: never + jpa: + properties: + hibernate: + dialect: org.hibernate.dialect.MySQL8Dialect + show_sql: true + format_sql: true + use_sql_comments: true + hbm2ddl: + auto: create + default_batch_fetch_size: 1000 \ No newline at end of file diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9e2f026dfb4eb6660911649c83668ea29e5781d8 100644 GIT binary patch literal 66280 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�pAE`_DU3%>` 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 vXv^ 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 F{|Doe8Y=(* literal 0 HcmV?d00001 diff --git a/src/main/java/com/example/apiPayload/code/status/ErrorStatus.java b/src/main/java/com/example/apiPayload/code/status/ErrorStatus.java index 5c33671..db3d283 100644 --- a/src/main/java/com/example/apiPayload/code/status/ErrorStatus.java +++ b/src/main/java/com/example/apiPayload/code/status/ErrorStatus.java @@ -28,7 +28,13 @@ public enum ErrorStatus implements BaseErrorCode { ARTICLE_NOT_FOUND(HttpStatus.NOT_FOUND, "ARTICLE4001", "게시글이 없습니다."), // FoodCategory Error - FOOD_CATEGORY_NOT_FOUND(HttpStatus.NOT_FOUND, "FOOD4001", "해당 음식 카테고리를 찾을 수 없습니다."); + FOOD_CATEGORY_NOT_FOUND(HttpStatus.NOT_FOUND, "FOOD4001", "해당 음식 카테고리를 찾을 수 없습니다."), + + // Store Error + STORE_NOT_FOUND(HttpStatus.NOT_FOUND, "STORE_4001","가게가 없습니다."); + + // Article Error + // ARTICLE_NOT_FOUND(HttpStatus.NOT_FOUND, "ARTICLE4001", "게시글이 없습니다."); private final HttpStatus httpStatus; private final String code; diff --git a/src/main/java/com/example/converter/StoreConverter.java b/src/main/java/com/example/converter/StoreConverter.java new file mode 100644 index 0000000..5fdecbb --- /dev/null +++ b/src/main/java/com/example/converter/StoreConverter.java @@ -0,0 +1,33 @@ +package com.example.converter; + +import com.example.domain.Review; +import com.example.web.dto.StoreResponseDTO; +import org.springframework.data.domain.Page; + +import java.util.List; +import java.util.stream.Collectors; + +public class StoreConverter { + public static StoreResponseDTO.ReviewPreViewDTO reviewPreViewDTO(Review review){ + return StoreResponseDTO.ReviewPreViewDTO.builder() + .ownerNickname(review.getMember().getName()) + .score(review.getScore()) + .createdAt(review.getCreatedAt().toLocalDate()) + .body(review.getBody()) + .build(); + } + public static StoreResponseDTO.ReviewPreViewListDTO reviewPreViewListDTO(Page reviewList){ + + List reviewPreViewDTOList = reviewList.stream() + .map(StoreConverter::reviewPreViewDTO).collect(Collectors.toList()); + + return StoreResponseDTO.ReviewPreViewListDTO.builder() + .isLast(reviewList.isLast()) + .isFirst(reviewList.isFirst()) + .totalPage(reviewList.getTotalPages()) + .totalElements(reviewList.getTotalElements()) + .listSize(reviewPreViewDTOList.size()) + .reviewList(reviewPreViewDTOList) + .build(); + } +} diff --git a/src/main/java/com/example/domain/Review.java b/src/main/java/com/example/domain/Review.java index ed1fdce..b1937fe 100644 --- a/src/main/java/com/example/domain/Review.java +++ b/src/main/java/com/example/domain/Review.java @@ -24,6 +24,8 @@ public class Review extends BaseEntity { private Float score; + private String body; + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; @@ -31,4 +33,21 @@ public class Review extends BaseEntity { @ManyToOne @JoinColumn(name = "store_id") private Store store; + + //@OneToMany(mappedBy = "review", cascade = CascadeType.ALL) + //private List reviewImageList; + + public void setMember(Member member){ + if(this.member != null) + member.getReviewList().remove(this); + this.member = member; + member.getReviewList().add(this); + } + + public void setStore(Store store){ + if (this.score != null) + store.getReviewList().remove(this); + this.store = store; + store.getReviewList().add(this); + } } \ No newline at end of file diff --git a/src/main/java/com/example/repository/ReviewRepository.java b/src/main/java/com/example/repository/ReviewRepository.java new file mode 100644 index 0000000..643eef1 --- /dev/null +++ b/src/main/java/com/example/repository/ReviewRepository.java @@ -0,0 +1,12 @@ +package com.example.repository; + +import com.example.domain.Review; +import com.example.domain.Store; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.jpa.repository.JpaRepository; + + +public interface ReviewRepository extends JpaRepository { + Page findAllByStore(Store store, PageRequest pageRequest); +} diff --git a/src/main/java/com/example/service/StoreService/StoreQueryService.java b/src/main/java/com/example/service/StoreService/StoreQueryService.java index 68a1bcf..ea7eb88 100644 --- a/src/main/java/com/example/service/StoreService/StoreQueryService.java +++ b/src/main/java/com/example/service/StoreService/StoreQueryService.java @@ -1,6 +1,8 @@ package com.example.service.StoreService; +import com.example.domain.Review; import com.example.domain.Store; +import org.springframework.data.domain.Page; import java.util.List; import java.util.Optional; @@ -8,4 +10,5 @@ public interface StoreQueryService { Optional findStore(Long id); List findStoresByNameAndScore(String name, Float score); - } + Page getReviewList(Long StoreId, Integer page); +} diff --git a/src/main/java/com/example/service/StoreService/StoreQueryServiceImpl.java b/src/main/java/com/example/service/StoreService/StoreQueryServiceImpl.java index 13a5b68..1f7817d 100644 --- a/src/main/java/com/example/service/StoreService/StoreQueryServiceImpl.java +++ b/src/main/java/com/example/service/StoreService/StoreQueryServiceImpl.java @@ -1,9 +1,13 @@ package com.example.service.StoreService; +import com.example.domain.Review; import com.example.domain.Store; +import com.example.repository.ReviewRepository; import com.example.repository.StoreRepository.StoreRepository; import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; import java.util.List; @@ -11,10 +15,13 @@ @Service @RequiredArgsConstructor -@Transactional +//@Transactional public class StoreQueryServiceImpl implements StoreQueryService{ + private final StoreRepository storeRepository; + private final ReviewRepository reviewRepository; + @Override public Optional findStore(Long id) { return storeRepository.findById(id); @@ -28,4 +35,14 @@ public List findStoresByNameAndScore(String name, Float score) { return filteredStores; } -} + + @Override + public Page getReviewList(Long StoreId, Integer page) { + + Store store = storeRepository.findById(StoreId).get(); + + Page StorePage = reviewRepository.findAllByStore(store, PageRequest.of(page, 10)); + return StorePage; + } + +} \ No newline at end of file diff --git a/src/main/java/com/example/validation/annotation/ExistStore.java b/src/main/java/com/example/validation/annotation/ExistStore.java new file mode 100644 index 0000000..9b6b940 --- /dev/null +++ b/src/main/java/com/example/validation/annotation/ExistStore.java @@ -0,0 +1,17 @@ +package com.example.validation.annotation; + +import com.example.validation.validator.StoreExistValidator; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; + +import java.lang.annotation.*; + +@Documented +@Constraint(validatedBy = StoreExistValidator.class) +@Target( { ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER }) +@Retention(RetentionPolicy.RUNTIME) +public @interface ExistStore { + String message() default "해당하는 가게가 존재하지 않습니다."; + Class[] groups() default {}; + Class[] payload() default {}; +} \ No newline at end of file diff --git a/src/main/java/com/example/validation/validator/StoreExistValidator.java b/src/main/java/com/example/validation/validator/StoreExistValidator.java new file mode 100644 index 0000000..e771b6b --- /dev/null +++ b/src/main/java/com/example/validation/validator/StoreExistValidator.java @@ -0,0 +1,36 @@ +package com.example.validation.validator; + +import com.example.domain.Store; +import com.example.service.StoreService.StoreQueryService; +import com.example.apiPayload.code.status.ErrorStatus; +import com.example.validation.annotation.ExistStore; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.Optional; + +@Component +@RequiredArgsConstructor +public class StoreExistValidator implements ConstraintValidator { + + private final StoreQueryService storeQueryService; + + @Override + public void initialize(ExistStore constraintAnnotation) { + ConstraintValidator.super.initialize(constraintAnnotation); + } + + @Override + public boolean isValid(Long value, ConstraintValidatorContext context) { + Optional target = storeQueryService.findStore(value); + + if (target.isEmpty()){ + context.disableDefaultConstraintViolation(); + context.buildConstraintViolationWithTemplate(ErrorStatus.STORE_NOT_FOUND.toString()).addConstraintViolation(); + return false; + } + return true; + } +} diff --git a/src/main/java/com/example/web/controller/StoreRestController.java b/src/main/java/com/example/web/controller/StoreRestController.java new file mode 100644 index 0000000..e385132 --- /dev/null +++ b/src/main/java/com/example/web/controller/StoreRestController.java @@ -0,0 +1,41 @@ +package com.example.web.controller; + + +import com.example.apiPayload.ApiResponse; +import com.example.service.StoreService.StoreQueryService; +import com.example.validation.annotation.ExistStore; +import com.example.web.dto.StoreResponseDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequiredArgsConstructor +@Validated +@RequestMapping("/stores") +public class StoreRestController { + + private final StoreQueryService storeQueryService; + + @GetMapping("/{storeId}/reviews") + @Operation(summary = "특정 가게의 리뷰 목록 조회 API",description = "특정 가게의 리뷰들의 목록을 조회하는 API이며, 페이징을 포함합니다. query String 으로 page 번호를 주세요") + @ApiResponses({ + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200",description = "OK, 성공"), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "AUTH003", description = "access 토큰을 주세요!",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "AUTH004", description = "acess 토큰 만료",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "AUTH006", description = "acess 토큰 모양이 이상함",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + }) + @Parameters({ + @Parameter(name = "storeId", description = "가게의 아이디, path variable 입니다!") + }) + public ApiResponse getReviewList(@ExistStore @PathVariable(name = "storeId") Long storeId, @RequestParam(name = "page") Integer page){ + storeQueryService.getReviewList(storeId,page); + return null; + } +} diff --git a/src/main/java/com/example/web/dto/StoreRequestDTO.java b/src/main/java/com/example/web/dto/StoreRequestDTO.java new file mode 100644 index 0000000..03b8a7c --- /dev/null +++ b/src/main/java/com/example/web/dto/StoreRequestDTO.java @@ -0,0 +1,4 @@ +package com.example.web.dto; + +public class StoreRequestDTO { +} diff --git a/src/main/java/com/example/web/dto/StoreResponseDTO.java b/src/main/java/com/example/web/dto/StoreResponseDTO.java new file mode 100644 index 0000000..d68b06d --- /dev/null +++ b/src/main/java/com/example/web/dto/StoreResponseDTO.java @@ -0,0 +1,35 @@ +package com.example.web.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.time.LocalDate; +import java.util.List; + +public class StoreResponseDTO { + @Builder + @Getter + @NoArgsConstructor + @AllArgsConstructor + public static class ReviewPreViewListDTO { + List reviewList; + Integer listSize; + Integer totalPage; + Long totalElements; + Boolean isFirst; + Boolean isLast; + } + + @Builder + @Getter + @NoArgsConstructor + @AllArgsConstructor + public static class ReviewPreViewDTO { + String ownerNickname; + Float score; + String body; + LocalDate createdAt; + } +} From 35b7d9f06f61dc16cd9f4422d5db4062cc5492b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=98=88=EC=A7=84=20=EB=B0=95?= Date: Mon, 26 May 2025 16:25:11 +0900 Subject: [PATCH 7/7] =?UTF-8?q?9=EC=A3=BC=EC=B0=A8=20=EC=8B=A4=EC=8A=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../executionHistory/executionHistory.bin | Bin 159693 -> 159693 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .gradle/8.13/fileHashes/fileHashes.bin | Bin 27297 -> 27297 bytes .gradle/8.13/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .gradle/buildOutputCleanup/cache.properties | 2 +- .gradle/file-system.probe | Bin 8 -> 8 bytes build/reports/problems/problems-report.html | 2 +- .../compileJava/previous-compilation-data.bin | Bin 66280 -> 66280 bytes 9 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gradle/8.13/executionHistory/executionHistory.bin b/.gradle/8.13/executionHistory/executionHistory.bin index e72ef2090a1a79590bd4dfb8b3ca41996de4a425..840bdb5f82ccb553349197db0b4ae50ab2689c4c 100644 GIT binary patch delta 1347 zcmaLWe@xVM7zc1a4^Jyk|ImJbmFve8ECq#w(kKYmY?Ne@amR5#;10OoI%3%GEzvt9 zW->hG+lkB=!cbv(Q)Aj6FwlrLMsC>V7?Oy}Sd0@3Yq9KkU;p>tYwzdtJfF|^bDtX; zUpzFv_{_Vx$shYa+EwNHbhrH_hkv8fU+${#rthqB_&&^7R%mFrWjq$xbSAa-q1>N! zGds?HmOBy0Lq~3phU|II@rYnwFt0n9r|Qiq|2HW7c}8yKE0tsSFLmaa2Osojb#Lxa z)15q3eS1{fP(Vri8)Pb=b=w*jSFWRGEJw?%qKpjPM}PH@E{ zC$0Wcq^#0W52adV^56KPPpq_>tI^S7l`juq-)mM%soaQad!|WPQ-rCFJ7^xbcVWw1fK~o1HfEAk=E7Y~8RZs=pDZj%hae zrgC`{2ccj&z0YB2tXxk04fLp!Jlp|&;iNQOrzonw8n42k<+G1zLr$3&L3PSW+qebS zn(30iLo4KW(R+Lt>T^*RYfzk!657HgAM(dgKjXz|od@2 zj%)6V3~g#H|A8!Rr+nfeWS862YCZtXw5dd{hT_{L8^^kAXaRDzt5tj%`U)Brb=!B* kJL=iFvcN#q>(Qi&%92O6=BTIk9mYYYg3M~sqJjQ@0YDFNEdT%j delta 1338 zcmaLWe@xVM7zc1a&-ZD~(?7HlY`L@&`XMMBEDeF_T#kxND((jd2Y3894o)+y%xcRF zh!tAE=o^D}ID)Z7Q)=r9H*;v?hdZGklw!vXgsC^6LqwrD?RnGx{rB4Y`8?0(^S#gK z{K2LE;L;N>rNtabFdi&(?0x&dTLq5Ip8cMJ*F0}H%ih_akhsEPs+ll1m2Wu_S9MR? zpkXTcyLZ#ZG`>*VJY45UU&jH#hZX6*igfj=rAdL|X~d1Q7I#qa=h)I?jj_qwRx zL>u{c=(dTHI0z+~=}De|TxPPf4;_7GdYrqU8)i!8DO3|Jl*luX$0EBeK#dl9fsf3J zLKaG3@0{ontL%Fc%CO41A?T1*)}6$<0juoRcT;rRN~wGWS!xzN#j}tnOFFu4h#Ir# z37$mOlSLUkhir{a*3CoD+vr)IN43r-^ZtQO+h`jfN0qZ>%C}HLw(RjS^k%m79)((< zA8(0%$(ED$Kq^N%E1S#&NLc^dPwbCE&i$eN%oWG&EGF2(UhC?by@<54Ij zPqK3Sy00Uvguck5Ql5tHbW-?kJhLNT{$U|KS6no zlj8Xpl;Na(hB-N4*!Z=kymg)959;Gs_xZe3?>Z^Y&@2iYb)~-4ckQG|eRsZ;TTw2} zr`>!U`YB)DL^pI(GQ-b{E%j(o4JuN16-Y}T%7+VRqrtyezN}PZ-ArheK7i^Fs-Xh; zsA0%jD34+Uswkvac@hc~%Bg3e`-;fThZaQd7g4;SQWQ20MW}|lm4Dx_`-^1W5mc`h z(JsD(i%oLL-ysNjT=X)ZgSuUm!h?`jOq=*O=;>mLT~@m|?|V|GmA=nS59`&%lwk17 zPaHM|9#HN7g;$E{p=AS$;mmT?ySOw;H@f8o_24#2+_ZzwL7i^dd=R?qmN#6Fqpc{B zTN^>B$+40Cnr1oQ)e2^{WJ%ANe*q`MdcXhx diff --git a/.gradle/8.13/executionHistory/executionHistory.lock b/.gradle/8.13/executionHistory/executionHistory.lock index a710ce037057e5d869a51a7f9642129d99d9834a..fa6b08008d2592c09fd974375013a7b39ad8b44b 100644 GIT binary patch literal 17 UcmZQx6~p$d`lZ7w1_@Edh$~ci4ehGk!x7-BZjW-moCg$ zJ~Kw;8nYiJV^oe6HOHbk#uzaNv|OcBI&EYs%*e{o_x=7DfADyH-|yFb@58~DwozN# zsO^)ZSyA?S*SEB0rAYXW0TTweo#lzFcU{4=UN?VGVM0Hc@FQnT_?{^f#z@|v<%^V> zFw9{Ibv1GH=)}E_8yiyYv)8*bBlIhJ68}~Qt9%Y?=$g7Syqkm~2YY=EIn+%K`t-Kf z={8}KaSiS?;y235y@p&9((#+Hf>S1};*tpqn4hg>FY8T6qS1sUbV#VHN#%l>JU~p2 zmKU)$$ND7PvDD`1!5_MF#&+_v9rWhN8QqDT)4J<4_FQ?LtA}(GzNFfOKH5y^W!Qu> zMCa+7+{H2tuD_`=lV}F>oOI>QlY32D7uuW2bejyGQibFH7-$^Lw)xo2_IOda%@ zFo#jF>YOM8l$G=q&iyh(4qnPL+Pc-4eFzA_<)t0t82 zV4;?`kYDJDY-mg+s8-XZ9^kTC%fcerAHk=-#(vdLr&`X>>OLHsrI$&jnoGT9y{n6l z)lPnp`72kLRV@BahUkyud9{S&YBi&3A~UwgKAGiWz{wspfn%zdAvFzKiS%Mvsyf&y z23F9bX3(!b!9Qv#k3D7WgN2l<`*=e=#y4W%05`?ZVjd}#>l2iyT^v&X;Q`OI}YBRB0W#7n?s-Ffi z7)84}gP+9E+srN(D_K+Su{VTPnm_Tm=Q&&A;Pvu()@~gi=q}&vW{>N0JE6OH?%5`< z|B#hpFp1~XWZn}4W1Lkl5?LYpIMUR3cB`vtRUcFfh{Zyz!P-&enIBL#d zdl&C^2V<4i`GONnNhfrY)84+P?u{ShDGFW9jxpg&VO#dIe&sw)>8kE5tt1@CfXZ@b?9}^29YybcN delta 1585 zcmXxje@xVM9LI64ix9C$Pohw#M6S6OH)@X3v=uQ9kpmP$M7Y4vsPM-cOXpm%3Tuvj zJ!8nM=;jOw8!|E^G7@K`jDV1pF}W-lE6g%rcn4jNw+MC1Mh|Y4bBgG+?s%2k__1G)HA+$&s zS#X3=6B=2xRws?5nb1U;3184;!j}x2@EMV*T5cxUgcIyB;VV8jp&p+JN15x^@=+4p zPJ6-uAEj=+c*D&*){~Lypxv!^Y~X^aw-T17=e}l@gvpiX*={B$@y>)k6WRz)*YdZ- z&xB$VPSKSf#qsp{@_tWS3#&I?^)5Hko%Y11juDrk2hUjVJBqy-TKkSlGwqtd)= zJq(D~?&S7tF@nd{)$CMDIHZ=-ueu4@AiXpm75y$=P&4^R_0X*rVat(TJP)fYC=&f8 zRH-{TtL|n>t>D3p)_$M{kJ`$6YCoq%e=8H>R5JJH%6fzxb&UODU$a=jfmghxS-Pxq($(cKNMVxA(QSIP&^=BgTxvD-%%(K!1qlEE literal 17 VcmZRs*mb8-QvY`d0~j#s0su8(1Xut7 diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 6374df08aad801186d66a7e51f0b0eb27daaccc9..7de669a5f61ce9b7ab97d759d6af1ef61fac434e 100644 GIT binary patch literal 17 UcmZQB2>&W}YQ^zW3=rT206Mz`BLDyZ literal 17 UcmZQB2>&W}YQ^zW3=m)d06L)s2><{9 diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties index f55aefe..7cbc510 100644 --- a/.gradle/buildOutputCleanup/cache.properties +++ b/.gradle/buildOutputCleanup/cache.properties @@ -1,2 +1,2 @@ -#Mon May 26 13:43:45 KST 2025 +#Mon May 26 16:23:13 KST 2025 gradle.version=8.13 diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe index ce973ab52efd5a265d306793022dd007ec09efea..6e238144fe34f13c48ebac115c2da2e53941b1b4 100644 GIT binary patch literal 8 PcmZQzV4TifnROlj20H>) literal 8 PcmZQzV4TkNy+9WL2O9!6 diff --git a/build/reports/problems/problems-report.html b/build/reports/problems/problems-report.html index 8404bf7..63a9f51 100644 --- a/build/reports/problems/problems-report.html +++ b/build/reports/problems/problems-report.html @@ -650,7 +650,7 @@ diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin index 9e2f026dfb4eb6660911649c83668ea29e5781d8..a75ab4b5af92038bec51fac51594301d01f45d6c 100644 GIT binary patch delta 30 kcmaFS%JQO>Wy4N6{xggW3=E8Wnf5V(=#QIE$SFJl0HWy4N6{(Vdg3=E7Pna(hR=)Idy$SFJl0H~b`RR910