From 6d60327092255f154ef8b62a12618a77135dcda1 Mon Sep 17 00:00:00 2001 From: hwiyoon20010309 Date: Sun, 10 May 2026 01:04:44 +0900 Subject: [PATCH 1/8] feat: member mission review domain implementation --- .gradle/8.14/checksums/checksums.lock | Bin 0 -> 17 bytes .../executionHistory/executionHistory.bin | Bin 0 -> 19653 bytes .../executionHistory/executionHistory.lock | Bin 0 -> 17 bytes .gradle/8.14/fileChanges/last-build.bin | Bin 0 -> 1 bytes .gradle/8.14/fileHashes/fileHashes.bin | Bin 0 -> 18697 bytes .gradle/8.14/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .gradle/8.14/gc.properties | 0 .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .gradle/buildOutputCleanup/cache.properties | 2 + .gradle/buildOutputCleanup/outputFiles.bin | Bin 0 -> 18695 bytes .gradle/file-system.probe | Bin 0 -> 8 bytes .gradle/vcs-1/gc.properties | 0 .idea/.gitignore | 8 + .idea/.name | 1 + .idea/Spring_Boot.iml | 9 + .idea/compiler.xml | 19 ++ .idea/dataSources.xml | 28 ++ .idea/gradle.xml | 16 ++ .idea/misc.xml | 10 + .idea/vcs.xml | 6 + HELP.md | 28 ++ build.gradle | 41 +++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43764 bytes gradle/wrapper/gradle-wrapper.properties | 7 + gradlew | 251 ++++++++++++++++++ gradlew.bat | 94 +++++++ settings.gradle | 1 + .../member/controller/MemberController.java | 47 ++++ .../member/converter/MemberConverter.java | 42 +++ .../domain/member/dto/MemberReqDTO.java | 18 ++ .../domain/member/dto/MemberResDTO.java | 32 +++ .../umc10th/domain/member/entity/Member.java | 51 ++++ .../member/repository/MemberRepository.java | 11 + .../domain/member/service/MemberService.java | 49 ++++ .../mission/controller/MissionController.java | 39 +++ .../mission/converter/MissionConverter.java | 44 +++ .../domain/mission/dto/MissionReqDTO.java | 11 + .../domain/mission/dto/MissionResDTO.java | 25 ++ .../domain/mission/entity/Mission.java | 39 +++ .../mission/repository/MissionRepository.java | 7 + .../mission/service/MissionService.java | 44 +++ .../review/controller/ReviewController.java | 28 ++ .../review/converter/ReviewConverter.java | 36 +++ .../domain/review/dto/ReviewReqDTO.java | 12 + .../domain/review/dto/ReviewResDTO.java | 17 ++ .../umc10th/domain/review/entity/Review.java | 43 +++ .../review/repository/ReviewRepository.java | 7 + .../domain/review/service/ReviewService.java | 42 +++ .../umc10th/domain/store/entity/Location.java | 20 ++ .../umc10th/domain/store/entity/Store.java | 27 ++ .../store/repository/LocationRepository.java | 7 + .../store/repository/StoreRepository.java | 7 + .../java/com/example/umc10th/settings.gradle | 1 + 53 files changed, 1227 insertions(+) create mode 100644 .gradle/8.14/checksums/checksums.lock create mode 100644 .gradle/8.14/executionHistory/executionHistory.bin create mode 100644 .gradle/8.14/executionHistory/executionHistory.lock create mode 100644 .gradle/8.14/fileChanges/last-build.bin create mode 100644 .gradle/8.14/fileHashes/fileHashes.bin create mode 100644 .gradle/8.14/fileHashes/fileHashes.lock create mode 100644 .gradle/8.14/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/.name create mode 100644 .idea/Spring_Boot.iml 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/vcs.xml create mode 100644 HELP.md 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/umc10th/domain/member/controller/MemberController.java create mode 100644 src/main/java/com/example/umc10th/domain/member/converter/MemberConverter.java create mode 100644 src/main/java/com/example/umc10th/domain/member/dto/MemberReqDTO.java create mode 100644 src/main/java/com/example/umc10th/domain/member/dto/MemberResDTO.java create mode 100644 src/main/java/com/example/umc10th/domain/member/entity/Member.java create mode 100644 src/main/java/com/example/umc10th/domain/member/repository/MemberRepository.java create mode 100644 src/main/java/com/example/umc10th/domain/member/service/MemberService.java create mode 100644 src/main/java/com/example/umc10th/domain/mission/controller/MissionController.java create mode 100644 src/main/java/com/example/umc10th/domain/mission/converter/MissionConverter.java create mode 100644 src/main/java/com/example/umc10th/domain/mission/dto/MissionReqDTO.java create mode 100644 src/main/java/com/example/umc10th/domain/mission/dto/MissionResDTO.java create mode 100644 src/main/java/com/example/umc10th/domain/mission/entity/Mission.java create mode 100644 src/main/java/com/example/umc10th/domain/mission/repository/MissionRepository.java create mode 100644 src/main/java/com/example/umc10th/domain/mission/service/MissionService.java create mode 100644 src/main/java/com/example/umc10th/domain/review/controller/ReviewController.java create mode 100644 src/main/java/com/example/umc10th/domain/review/converter/ReviewConverter.java create mode 100644 src/main/java/com/example/umc10th/domain/review/dto/ReviewReqDTO.java create mode 100644 src/main/java/com/example/umc10th/domain/review/dto/ReviewResDTO.java create mode 100644 src/main/java/com/example/umc10th/domain/review/entity/Review.java create mode 100644 src/main/java/com/example/umc10th/domain/review/repository/ReviewRepository.java create mode 100644 src/main/java/com/example/umc10th/domain/review/service/ReviewService.java create mode 100644 src/main/java/com/example/umc10th/domain/store/entity/Location.java create mode 100644 src/main/java/com/example/umc10th/domain/store/entity/Store.java create mode 100644 src/main/java/com/example/umc10th/domain/store/repository/LocationRepository.java create mode 100644 src/main/java/com/example/umc10th/domain/store/repository/StoreRepository.java create mode 100644 src/main/java/com/example/umc10th/settings.gradle diff --git a/.gradle/8.14/checksums/checksums.lock b/.gradle/8.14/checksums/checksums.lock new file mode 100644 index 0000000000000000000000000000000000000000..641e17288c431ea78a376bebd886f54b01f80e6b GIT binary patch literal 17 TcmZQxd;hY^_sAV<8K3|FLN5h8 literal 0 HcmV?d00001 diff --git a/.gradle/8.14/executionHistory/executionHistory.bin b/.gradle/8.14/executionHistory/executionHistory.bin new file mode 100644 index 0000000000000000000000000000000000000000..eb7a891b7c247eae888abde05ef837326e8e760f GIT binary patch literal 19653 zcmeI%T}Tu`00;0{@1(H8g+36pFEC2T)6=^=t%tI+3^c>@?CW6J+a2##&)ao&_pa=v zheXNn10w9xmoy5hhcM_R>dCi?ND+z(B8V~yDx#u~y*m$;dJya(;=i!F!_3b7cYZgs zFXtsBhyOWskm+OjbP**8KmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1pXHRzcrDp z)MRotW+V#PaYBk0TLrFI%H5Z-WcWg=xq4gr|AX}1sxL^j;R*o=KmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izzz`r0+ zN{Ic4b?S-pEYsRHnW`9TVUpwyxuoEsU^EmpWVwz1wCY^u;LH8Cf|`+K`VlsCY4vYa z&2z7{>;xI(LMR&xRsA-fr_NMNFmr5!V4Jz}sPjlC-Y+TUXdHUYh{pN$bg4vei_}wA?sR#axez}Tz0@qr50n|DK2(8sY1d#}b+Yfl*p)sumv^A4OIknkh&mb16~&&OX+JZhR) z+jHYZGWQ#2@79ysDj7LE*D1yc|DpZu)`#!&b22}NYu0pko}4(I5IgU+bJl0)=q~|1 B;iLcn literal 0 HcmV?d00001 diff --git a/.gradle/8.14/executionHistory/executionHistory.lock b/.gradle/8.14/executionHistory/executionHistory.lock new file mode 100644 index 0000000000000000000000000000000000000000..3bdee4ecbd80a7c0d3443ec407d594fea4033dd5 GIT binary patch literal 17 UcmZP;n!E7*w7Geu3=qHu05!e@UjP6A literal 0 HcmV?d00001 diff --git a/.gradle/8.14/fileChanges/last-build.bin b/.gradle/8.14/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/.gradle/8.14/fileHashes/fileHashes.bin b/.gradle/8.14/fileHashes/fileHashes.bin new file mode 100644 index 0000000000000000000000000000000000000000..062d42e31efdf651184c69960b64fcb33c7f91d3 GIT binary patch literal 18697 zcmeI%PbdUo9LDi?S;?PR2bsfYjZjKb=3wPu%Yjm)w*0wna+9WZv$;5E4{A>iTf)hK zC?y9sd)SMM5^IaYmXu5@p&S(6>78lQ9^LeP>z()4Gd)f3=Q<-oXn}8ciPCB=jZ6q2 zfB*srAbM~kSg)=n9h3Ko7gFijD@@x!5 zb@h7G^8OzjbscPnTNeFp9`^FHrmQs*c|Qne&ugTy^ssFZWKFFR6Dt5kLR| z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zK;SO|{j%IGx8dwSqVhr4eVLtL%rp-}R;LiYt=F1lwfaKcvOIf#H{KG(;mel}t?FZ8 zylp+Xp&Dz`s?pwB-nf{&oBG--+|FJcg;IeU<%;4scWU3Jl#HfAtv7tLEQ%MJe8)LHO& za$El&WD~CmFYgUYzxeDkad&6s&Xu0lo}16y_l+(_r9WxUUv)$)Lz$xVS?x#t2m8rx zuU>jmd!hY&HML$IlYXeZlv?mlS_(1gr`mg`kDnh)xl8GL+G7#d-z`@*q+e^Fh;Me? zJ~%hhm$d8Mm{3pfj4J{NAb + + + + + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..7cfa737 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml new file mode 100644 index 0000000..47af1f8 --- /dev/null +++ b/.idea/dataSources.xml @@ -0,0 +1,28 @@ + + + + + mysql.8 + true + true + $PROJECT_DIR$/src/main/resources/application.yaml + com.mysql.cj.jdbc.Driver + jdbc:mysql://localhost:3306/umc10th + $ProjectFileDir$ + + + mysql.8 + true + true + $PROJECT_DIR$/src/main/resources/application.yaml + com.mysql.cj.jdbc.Driver + jdbc:mysql://localhost:3306/umc10th + + + + + + $ProjectFileDir$ + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..ce1c62c --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..f16dea7 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /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..9035108 --- /dev/null +++ b/HELP.md @@ -0,0 +1,28 @@ +# 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/4.0.5/gradle-plugin) +* [Create an OCI image](https://docs.spring.io/spring-boot/4.0.5/gradle-plugin/packaging-oci-image.html) +* [Spring Data JPA](https://docs.spring.io/spring-boot/4.0.5/reference/data/sql.html#data.sql.jpa-and-spring-data) +* [Spring Web](https://docs.spring.io/spring-boot/4.0.5/reference/web/servlet.html) + +### Guides + +The following guides illustrate how to use some features concretely: + +* [Accessing Data with JPA](https://spring.io/guides/gs/accessing-data-jpa/) +* [Accessing data with MySQL](https://spring.io/guides/gs/accessing-data-mysql/) +* [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/) + +### 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 new file mode 100644 index 0000000..aaf12d5 --- /dev/null +++ b/build.gradle @@ -0,0 +1,41 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '4.0.5' + id 'io.spring.dependency-management' version '1.1.7' +} + +group = 'com.example' +version = '0.0.1-SNAPSHOT' +description = 'umc10th' + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(21) + } +} + +repositories { + mavenCentral() +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'org.springframework.boot:spring-boot-starter-webmvc' + compileOnly 'org.projectlombok:lombok' + runtimeOnly 'com.mysql:mysql-connector-j' + annotationProcessor 'org.projectlombok:lombok' + testImplementation 'org.springframework.boot:spring-boot-starter-data-jpa-test' + testImplementation 'org.springframework.boot:spring-boot-starter-webmvc-test' + testCompileOnly 'org.projectlombok:lombok' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' + testAnnotationProcessor 'org.projectlombok:lombok' + + // Swagger + implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:3.0.1' + implementation 'org.springdoc:springdoc-openapi-starter-webmvc-api:3.0.1' + +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..1b33c55baabb587c669f562ae36f953de2481846 GIT binary patch literal 43764 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 '} + 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="\\\"\\\"" + + +# 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" \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ + "$@" + +# 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..db3a6ac --- /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= + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* + +: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..67a1b8e --- /dev/null +++ b/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'umc10th' diff --git a/src/main/java/com/example/umc10th/domain/member/controller/MemberController.java b/src/main/java/com/example/umc10th/domain/member/controller/MemberController.java new file mode 100644 index 0000000..bad5e2e --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/member/controller/MemberController.java @@ -0,0 +1,47 @@ +package com.example.umc10th.domain.member.controller; + +import com.example.umc10th.domain.member.dto.MemberReqDTO; +import com.example.umc10th.domain.member.dto.MemberResDTO; +import com.example.umc10th.domain.member.service.MemberService; +import com.example.umc10th.global.apiPayload.ApiResponse; +import com.example.umc10th.global.apiPayload.code.GeneralSuccessCode; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/members") +public class MemberController { + + private final MemberService memberService; + + @PostMapping + public ApiResponse joinMember( + @RequestBody MemberReqDTO.JoinDTO request + ) { + return ApiResponse.onSuccess( + GeneralSuccessCode.OK, + memberService.joinMember(request) + ); + } + + @GetMapping("/{memberId}") + public ApiResponse getMember( + @PathVariable Long memberId + ) { + return ApiResponse.onSuccess( + GeneralSuccessCode.OK, + memberService.getMember(memberId) + ); + } + + @DeleteMapping("/{memberId}") + public ApiResponse deleteMember( + @PathVariable Long memberId + ) { + return ApiResponse.onSuccess( + GeneralSuccessCode.OK, + memberService.deleteMember(memberId) + ); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/member/converter/MemberConverter.java b/src/main/java/com/example/umc10th/domain/member/converter/MemberConverter.java new file mode 100644 index 0000000..e843bd6 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/member/converter/MemberConverter.java @@ -0,0 +1,42 @@ +package com.example.umc10th.domain.member.converter; + +import com.example.umc10th.domain.member.dto.MemberReqDTO; +import com.example.umc10th.domain.member.dto.MemberResDTO; +import com.example.umc10th.domain.member.entity.Member; + +public class MemberConverter { + + public static Member toMember(MemberReqDTO.JoinDTO request) { + return Member.builder() + .email(request.email()) + .password(request.password()) + .nickname(request.nickname()) + .phoneNumber(request.phoneNumber()) + .gender(request.gender()) + .birth(request.birth()) + .point(0) + .build(); + } + + public static MemberResDTO.JoinResultDTO toJoinResultDTO(Member member) { + return MemberResDTO.JoinResultDTO.builder() + .memberId(member.getId()) + .email(member.getEmail()) + .nickname(member.getNickname()) + .createdAt(member.getCreatedAt()) + .build(); + } + + public static MemberResDTO.MemberInfoDTO toMemberInfoDTO(Member member) { + return MemberResDTO.MemberInfoDTO.builder() + .memberId(member.getId()) + .email(member.getEmail()) + .nickname(member.getNickname()) + .phoneNumber(member.getPhoneNumber()) + .gender(member.getGender()) + .birth(member.getBirth()) + .point(member.getPoint()) + .createdAt(member.getCreatedAt()) + .build(); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/member/dto/MemberReqDTO.java b/src/main/java/com/example/umc10th/domain/member/dto/MemberReqDTO.java new file mode 100644 index 0000000..a885082 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/member/dto/MemberReqDTO.java @@ -0,0 +1,18 @@ +package com.example.umc10th.domain.member.dto; + +import com.example.umc10th.domain.member.enums.Gender; + +import java.time.LocalDate; + +public class MemberReqDTO { + + public record JoinDTO( + String email, + String password, + String nickname, + String phoneNumber, + Gender gender, + LocalDate birth + ) { + } +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/member/dto/MemberResDTO.java b/src/main/java/com/example/umc10th/domain/member/dto/MemberResDTO.java new file mode 100644 index 0000000..8ce8faa --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/member/dto/MemberResDTO.java @@ -0,0 +1,32 @@ +package com.example.umc10th.domain.member.dto; + +import com.example.umc10th.domain.member.enums.Gender; +import lombok.Builder; + +import java.time.LocalDate; +import java.time.LocalDateTime; + +public class MemberResDTO { + + @Builder + public record JoinResultDTO( + Long memberId, + String email, + String nickname, + LocalDateTime createdAt + ) { + } + + @Builder + public record MemberInfoDTO( + Long memberId, + String email, + String nickname, + String phoneNumber, + Gender gender, + LocalDate birth, + Integer point, + LocalDateTime createdAt + ) { + } +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/member/entity/Member.java b/src/main/java/com/example/umc10th/domain/member/entity/Member.java new file mode 100644 index 0000000..1a5776a --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/member/entity/Member.java @@ -0,0 +1,51 @@ +package com.example.umc10th.domain.member.entity; + +import com.example.umc10th.domain.member.enums.Gender; +import jakarta.persistence.*; +import lombok.*; + +import java.time.LocalDate; +import java.time.LocalDateTime; + +@Entity +@Getter +@Builder +@AllArgsConstructor +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Table(name = "member") +public class Member { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "member_id") + private Long id; + + @Column(nullable = false, length = 50) + private String email; + + @Column(nullable = false) + private String password; + + @Column(nullable = false, length = 30) + private String nickname; + + @Column(name = "phone_number", length = 20) + private String phoneNumber; + + @Enumerated(EnumType.STRING) + @Column(length = 20) + private Gender gender; + + private LocalDate birth; + + private Integer point; + + @Column(name = "created_at") + private LocalDateTime createdAt; + + @PrePersist + public void prePersist() { + this.point = this.point == null ? 0 : this.point; + this.createdAt = LocalDateTime.now(); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/member/repository/MemberRepository.java b/src/main/java/com/example/umc10th/domain/member/repository/MemberRepository.java new file mode 100644 index 0000000..c916b62 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/member/repository/MemberRepository.java @@ -0,0 +1,11 @@ +package com.example.umc10th.domain.member.repository; + +import com.example.umc10th.domain.member.entity.Member; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface MemberRepository extends JpaRepository { + + boolean existsByEmail(String email); + + void deleteByEmail(String email); +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/member/service/MemberService.java b/src/main/java/com/example/umc10th/domain/member/service/MemberService.java new file mode 100644 index 0000000..459bb0c --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/member/service/MemberService.java @@ -0,0 +1,49 @@ +package com.example.umc10th.domain.member.service; + +import com.example.umc10th.domain.member.converter.MemberConverter; +import com.example.umc10th.domain.member.dto.MemberReqDTO; +import com.example.umc10th.domain.member.dto.MemberResDTO; +import com.example.umc10th.domain.member.entity.Member; +import com.example.umc10th.domain.member.exception.MemberException; +import com.example.umc10th.domain.member.exception.code.MemberErrorCode; +import com.example.umc10th.domain.member.repository.MemberRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class MemberService { + + private final MemberRepository memberRepository; + + @Transactional + public MemberResDTO.JoinResultDTO joinMember(MemberReqDTO.JoinDTO request) { + + Member member = MemberConverter.toMember(request); + + Member savedMember = memberRepository.save(member); + + return MemberConverter.toJoinResultDTO(savedMember); + } + + public MemberResDTO.MemberInfoDTO getMember(Long memberId) { + + Member member = memberRepository.findById(memberId) + .orElseThrow(() -> new MemberException(MemberErrorCode.MEMBER_NOT_FOUND)); + + return MemberConverter.toMemberInfoDTO(member); + } + + @Transactional + public String deleteMember(Long memberId) { + + Member member = memberRepository.findById(memberId) + .orElseThrow(() -> new MemberException(MemberErrorCode.MEMBER_NOT_FOUND)); + + memberRepository.delete(member); + + return "OK"; + } +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/mission/controller/MissionController.java b/src/main/java/com/example/umc10th/domain/mission/controller/MissionController.java new file mode 100644 index 0000000..9d6141a --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/mission/controller/MissionController.java @@ -0,0 +1,39 @@ +package com.example.umc10th.domain.mission.controller; + +import com.example.umc10th.domain.mission.dto.MissionReqDTO; +import com.example.umc10th.domain.mission.dto.MissionResDTO; +import com.example.umc10th.domain.mission.service.MissionService; +import com.example.umc10th.global.apiPayload.ApiResponse; +import com.example.umc10th.global.apiPayload.code.GeneralSuccessCode; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/missions") +public class MissionController { + + private final MissionService missionService; + + @PostMapping + public ApiResponse createMission( + @RequestBody MissionReqDTO.CreateMissionDTO request + ) { + + return ApiResponse.onSuccess( + GeneralSuccessCode.OK, + missionService.createMission(request) + ); + } + + @GetMapping("/{missionId}") + public ApiResponse getMission( + @PathVariable Long missionId + ) { + + return ApiResponse.onSuccess( + GeneralSuccessCode.OK, + missionService.getMission(missionId) + ); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/mission/converter/MissionConverter.java b/src/main/java/com/example/umc10th/domain/mission/converter/MissionConverter.java new file mode 100644 index 0000000..f5ef7c4 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/mission/converter/MissionConverter.java @@ -0,0 +1,44 @@ +package com.example.umc10th.domain.mission.converter; + +import com.example.umc10th.domain.mission.dto.MissionReqDTO; +import com.example.umc10th.domain.mission.dto.MissionResDTO; +import com.example.umc10th.domain.mission.entity.Mission; +import com.example.umc10th.domain.store.entity.Store; + +public class MissionConverter { + + public static Mission toMission( + MissionReqDTO.CreateMissionDTO request, + Store store + ) { + + return Mission.builder() + .store(store) + .title(request.title()) + .description(request.description()) + .build(); + } + + public static MissionResDTO.CreateMissionResultDTO toCreateMissionResultDTO( + Mission mission + ) { + + return MissionResDTO.CreateMissionResultDTO.builder() + .missionId(mission.getId()) + .title(mission.getTitle()) + .description(mission.getDescription()) + .createdAt(mission.getCreatedAt()) + .build(); + } + + public static MissionResDTO.MissionInfoDTO toMissionInfoDTO( + Mission mission + ) { + + return MissionResDTO.MissionInfoDTO.builder() + .missionId(mission.getId()) + .title(mission.getTitle()) + .description(mission.getDescription()) + .build(); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/mission/dto/MissionReqDTO.java b/src/main/java/com/example/umc10th/domain/mission/dto/MissionReqDTO.java new file mode 100644 index 0000000..fad60bc --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/mission/dto/MissionReqDTO.java @@ -0,0 +1,11 @@ +package com.example.umc10th.domain.mission.dto; + +public class MissionReqDTO { + + public record CreateMissionDTO( + Long storeId, + String title, + String description + ) { + } +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/mission/dto/MissionResDTO.java b/src/main/java/com/example/umc10th/domain/mission/dto/MissionResDTO.java new file mode 100644 index 0000000..53cf207 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/mission/dto/MissionResDTO.java @@ -0,0 +1,25 @@ +package com.example.umc10th.domain.mission.dto; + +import lombok.Builder; + +import java.time.LocalDateTime; + +public class MissionResDTO { + + @Builder + public record CreateMissionResultDTO( + Long missionId, + String title, + String description, + LocalDateTime createdAt + ) { + } + + @Builder + public record MissionInfoDTO( + Long missionId, + String title, + String description + ) { + } +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/mission/entity/Mission.java b/src/main/java/com/example/umc10th/domain/mission/entity/Mission.java new file mode 100644 index 0000000..e6cb080 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/mission/entity/Mission.java @@ -0,0 +1,39 @@ +package com.example.umc10th.domain.mission.entity; + +import com.example.umc10th.domain.store.entity.Store; +import jakarta.persistence.*; +import lombok.*; + +import java.time.LocalDateTime; + +@Entity +@Getter +@Builder +@AllArgsConstructor +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Table(name = "mission") +public class Mission { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "mission_id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "store_id") + private Store store; + + @Column(nullable = false) + private String title; + + @Column(columnDefinition = "TEXT") + private String description; + + @Column(name = "created_at") + private LocalDateTime createdAt; + + @PrePersist + public void prePersist() { + this.createdAt = LocalDateTime.now(); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/mission/repository/MissionRepository.java b/src/main/java/com/example/umc10th/domain/mission/repository/MissionRepository.java new file mode 100644 index 0000000..b59d713 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/mission/repository/MissionRepository.java @@ -0,0 +1,7 @@ +package com.example.umc10th.domain.mission.repository; + +import com.example.umc10th.domain.mission.entity.Mission; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface MissionRepository extends JpaRepository { +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/mission/service/MissionService.java b/src/main/java/com/example/umc10th/domain/mission/service/MissionService.java new file mode 100644 index 0000000..1b06a68 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/mission/service/MissionService.java @@ -0,0 +1,44 @@ +package com.example.umc10th.domain.mission.service; + +import com.example.umc10th.domain.mission.converter.MissionConverter; +import com.example.umc10th.domain.mission.dto.MissionReqDTO; +import com.example.umc10th.domain.mission.dto.MissionResDTO; +import com.example.umc10th.domain.mission.entity.Mission; +import com.example.umc10th.domain.mission.repository.MissionRepository; +import com.example.umc10th.domain.store.entity.Store; +import com.example.umc10th.domain.store.repository.StoreRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class MissionService { + + private final MissionRepository missionRepository; + private final StoreRepository storeRepository; + + @Transactional + public MissionResDTO.CreateMissionResultDTO createMission( + MissionReqDTO.CreateMissionDTO request + ) { + + Store store = storeRepository.findById(request.storeId()) + .orElseThrow(); + + Mission mission = MissionConverter.toMission(request, store); + + Mission savedMission = missionRepository.save(mission); + + return MissionConverter.toCreateMissionResultDTO(savedMission); + } + + public MissionResDTO.MissionInfoDTO getMission(Long missionId) { + + Mission mission = missionRepository.findById(missionId) + .orElseThrow(); + + return MissionConverter.toMissionInfoDTO(mission); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/review/controller/ReviewController.java b/src/main/java/com/example/umc10th/domain/review/controller/ReviewController.java new file mode 100644 index 0000000..af34156 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/review/controller/ReviewController.java @@ -0,0 +1,28 @@ +package com.example.umc10th.domain.review.controller; + +import com.example.umc10th.domain.review.dto.ReviewReqDTO; +import com.example.umc10th.domain.review.dto.ReviewResDTO; +import com.example.umc10th.domain.review.service.ReviewService; +import com.example.umc10th.global.apiPayload.ApiResponse; +import com.example.umc10th.global.apiPayload.code.GeneralSuccessCode; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/reviews") +public class ReviewController { + + private final ReviewService reviewService; + + @PostMapping + public ApiResponse createReview( + @RequestBody ReviewReqDTO.CreateReviewDTO request + ) { + + return ApiResponse.onSuccess( + GeneralSuccessCode.OK, + reviewService.createReview(request) + ); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/review/converter/ReviewConverter.java b/src/main/java/com/example/umc10th/domain/review/converter/ReviewConverter.java new file mode 100644 index 0000000..eb41cd2 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/review/converter/ReviewConverter.java @@ -0,0 +1,36 @@ +package com.example.umc10th.domain.review.converter; + +import com.example.umc10th.domain.member.entity.Member; +import com.example.umc10th.domain.review.dto.ReviewReqDTO; +import com.example.umc10th.domain.review.dto.ReviewResDTO; +import com.example.umc10th.domain.review.entity.Review; +import com.example.umc10th.domain.store.entity.Store; + +public class ReviewConverter { + + public static Review toReview( + ReviewReqDTO.CreateReviewDTO request, + Member member, + Store store + ) { + + return Review.builder() + .member(member) + .store(store) + .content(request.content()) + .rating(request.rating()) + .build(); + } + + public static ReviewResDTO.CreateReviewResultDTO toCreateReviewResultDTO( + Review review + ) { + + return ReviewResDTO.CreateReviewResultDTO.builder() + .reviewId(review.getId()) + .content(review.getContent()) + .rating(review.getRating()) + .createdAt(review.getCreatedAt()) + .build(); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/review/dto/ReviewReqDTO.java b/src/main/java/com/example/umc10th/domain/review/dto/ReviewReqDTO.java new file mode 100644 index 0000000..0e0b928 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/review/dto/ReviewReqDTO.java @@ -0,0 +1,12 @@ +package com.example.umc10th.domain.review.dto; + +public class ReviewReqDTO { + + public record CreateReviewDTO( + Long memberId, + Long storeId, + String content, + Integer rating + ) { + } +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/review/dto/ReviewResDTO.java b/src/main/java/com/example/umc10th/domain/review/dto/ReviewResDTO.java new file mode 100644 index 0000000..dbdb36c --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/review/dto/ReviewResDTO.java @@ -0,0 +1,17 @@ +package com.example.umc10th.domain.review.dto; + +import lombok.Builder; + +import java.time.LocalDateTime; + +public class ReviewResDTO { + + @Builder + public record CreateReviewResultDTO( + Long reviewId, + String content, + Integer rating, + LocalDateTime createdAt + ) { + } +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/review/entity/Review.java b/src/main/java/com/example/umc10th/domain/review/entity/Review.java new file mode 100644 index 0000000..4f6fe4a --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/review/entity/Review.java @@ -0,0 +1,43 @@ +package com.example.umc10th.domain.review.entity; + +import com.example.umc10th.domain.member.entity.Member; +import com.example.umc10th.domain.store.entity.Store; +import jakarta.persistence.*; +import lombok.*; + +import java.time.LocalDateTime; + +@Entity +@Getter +@Builder +@AllArgsConstructor +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Table(name = "review") +public class Review { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "member_id") + private Member member; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "store_id") + private Store store; + + @Column(columnDefinition = "TEXT") + private String content; + + private Integer rating; + + @Column(name = "created_at") + private LocalDateTime createdAt; + + @PrePersist + public void prePersist() { + this.createdAt = LocalDateTime.now(); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/review/repository/ReviewRepository.java b/src/main/java/com/example/umc10th/domain/review/repository/ReviewRepository.java new file mode 100644 index 0000000..73627b1 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/review/repository/ReviewRepository.java @@ -0,0 +1,7 @@ +package com.example.umc10th.domain.review.repository; + +import com.example.umc10th.domain.review.entity.Review; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ReviewRepository extends JpaRepository { +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/review/service/ReviewService.java b/src/main/java/com/example/umc10th/domain/review/service/ReviewService.java new file mode 100644 index 0000000..5a6549d --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/review/service/ReviewService.java @@ -0,0 +1,42 @@ +package com.example.umc10th.domain.review.service; + +import com.example.umc10th.domain.member.entity.Member; +import com.example.umc10th.domain.member.repository.MemberRepository; +import com.example.umc10th.domain.review.converter.ReviewConverter; +import com.example.umc10th.domain.review.dto.ReviewReqDTO; +import com.example.umc10th.domain.review.dto.ReviewResDTO; +import com.example.umc10th.domain.review.entity.Review; +import com.example.umc10th.domain.review.repository.ReviewRepository; +import com.example.umc10th.domain.store.entity.Store; +import com.example.umc10th.domain.store.repository.StoreRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class ReviewService { + + private final ReviewRepository reviewRepository; + private final MemberRepository memberRepository; + private final StoreRepository storeRepository; + + @Transactional + public ReviewResDTO.CreateReviewResultDTO createReview( + ReviewReqDTO.CreateReviewDTO request + ) { + + Member member = memberRepository.findById(request.memberId()) + .orElseThrow(); + + Store store = storeRepository.findById(request.storeId()) + .orElseThrow(); + + Review review = ReviewConverter.toReview(request, member, store); + + Review savedReview = reviewRepository.save(review); + + return ReviewConverter.toCreateReviewResultDTO(savedReview); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/store/entity/Location.java b/src/main/java/com/example/umc10th/domain/store/entity/Location.java new file mode 100644 index 0000000..f0caa9e --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/store/entity/Location.java @@ -0,0 +1,20 @@ +package com.example.umc10th.domain.store.entity; + +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Getter +@Builder +@AllArgsConstructor +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Table(name = "location") +public class Location { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "location_id") + private Long id; + + private String name; +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/store/entity/Store.java b/src/main/java/com/example/umc10th/domain/store/entity/Store.java new file mode 100644 index 0000000..4913547 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/store/entity/Store.java @@ -0,0 +1,27 @@ +package com.example.umc10th.domain.store.entity; + +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Getter +@Builder +@AllArgsConstructor +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Table(name = "store") +public class Store { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "store_id") + private Long id; + + @Column(nullable = false) + private String name; + + private String address; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "location_id") + private Location location; +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/store/repository/LocationRepository.java b/src/main/java/com/example/umc10th/domain/store/repository/LocationRepository.java new file mode 100644 index 0000000..c5f7bb1 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/store/repository/LocationRepository.java @@ -0,0 +1,7 @@ +package com.example.umc10th.domain.store.repository; + +import com.example.umc10th.domain.store.entity.Location; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface LocationRepository extends JpaRepository { +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/store/repository/StoreRepository.java b/src/main/java/com/example/umc10th/domain/store/repository/StoreRepository.java new file mode 100644 index 0000000..9a66926 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/store/repository/StoreRepository.java @@ -0,0 +1,7 @@ +package com.example.umc10th.domain.store.repository; + +import com.example.umc10th.domain.store.entity.Store; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface StoreRepository extends JpaRepository { +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/settings.gradle b/src/main/java/com/example/umc10th/settings.gradle new file mode 100644 index 0000000..67a1b8e --- /dev/null +++ b/src/main/java/com/example/umc10th/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'umc10th' From 52a768bd718041307247676ef7a83d5f3508d118 Mon Sep 17 00:00:00 2001 From: hwiyoon20010309 Date: Sun, 10 May 2026 01:15:20 +0900 Subject: [PATCH 2/8] =?UTF-8?q?feat:=20JPA=20=EA=B8=B0=EB=B0=98=20?= =?UTF-8?q?=EC=97=94=ED=8B=B0=ED=8B=B0=20=EC=A0=9C=EC=9E=91=20=EB=B0=8F=20?= =?UTF-8?q?=EB=A7=A4=ED=95=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../umc10th/domain/member/entity/Member.java | 14 ++++++++------ .../umc10th/domain/member/enums/Gender.java | 6 ++++++ .../umc10th/domain/store/entity/Location.java | 6 ++++++ .../example/umc10th/domain/store/entity/Store.java | 12 +++++++++++- 4 files changed, 31 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/example/umc10th/domain/member/enums/Gender.java diff --git a/src/main/java/com/example/umc10th/domain/member/entity/Member.java b/src/main/java/com/example/umc10th/domain/member/entity/Member.java index 1a5776a..fe7ecf1 100644 --- a/src/main/java/com/example/umc10th/domain/member/entity/Member.java +++ b/src/main/java/com/example/umc10th/domain/member/entity/Member.java @@ -1,11 +1,14 @@ package com.example.umc10th.domain.member.entity; import com.example.umc10th.domain.member.enums.Gender; +import com.example.umc10th.domain.review.entity.Review; import jakarta.persistence.*; import lombok.*; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; @Entity @Getter @@ -20,20 +23,16 @@ public class Member { @Column(name = "member_id") private Long id; - @Column(nullable = false, length = 50) private String email; - @Column(nullable = false) private String password; - @Column(nullable = false, length = 30) private String nickname; - @Column(name = "phone_number", length = 20) + @Column(name = "phone_number") private String phoneNumber; @Enumerated(EnumType.STRING) - @Column(length = 20) private Gender gender; private LocalDate birth; @@ -43,9 +42,12 @@ public class Member { @Column(name = "created_at") private LocalDateTime createdAt; + @OneToMany(mappedBy = "member") + private List reviewList = new ArrayList<>(); + @PrePersist public void prePersist() { - this.point = this.point == null ? 0 : this.point; this.createdAt = LocalDateTime.now(); + this.point = 0; } } \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/member/enums/Gender.java b/src/main/java/com/example/umc10th/domain/member/enums/Gender.java new file mode 100644 index 0000000..8d67737 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/member/enums/Gender.java @@ -0,0 +1,6 @@ +package com.example.umc10th.domain.member.enums; + +public enum Gender { + MALE, + FEMALE +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/store/entity/Location.java b/src/main/java/com/example/umc10th/domain/store/entity/Location.java index f0caa9e..59c6998 100644 --- a/src/main/java/com/example/umc10th/domain/store/entity/Location.java +++ b/src/main/java/com/example/umc10th/domain/store/entity/Location.java @@ -3,6 +3,9 @@ import jakarta.persistence.*; import lombok.*; +import java.util.ArrayList; +import java.util.List; + @Entity @Getter @Builder @@ -17,4 +20,7 @@ public class Location { private Long id; private String name; + + @OneToMany(mappedBy = "location") + private List storeList = new ArrayList<>(); } \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/store/entity/Store.java b/src/main/java/com/example/umc10th/domain/store/entity/Store.java index 4913547..0b0bf0c 100644 --- a/src/main/java/com/example/umc10th/domain/store/entity/Store.java +++ b/src/main/java/com/example/umc10th/domain/store/entity/Store.java @@ -1,8 +1,13 @@ package com.example.umc10th.domain.store.entity; +import com.example.umc10th.domain.mission.entity.Mission; +import com.example.umc10th.domain.review.entity.Review; import jakarta.persistence.*; import lombok.*; +import java.util.ArrayList; +import java.util.List; + @Entity @Getter @Builder @@ -16,7 +21,6 @@ public class Store { @Column(name = "store_id") private Long id; - @Column(nullable = false) private String name; private String address; @@ -24,4 +28,10 @@ public class Store { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "location_id") private Location location; + + @OneToMany(mappedBy = "store") + private List missionList = new ArrayList<>(); + + @OneToMany(mappedBy = "store") + private List reviewList = new ArrayList<>(); } \ No newline at end of file From 948c43b8ada859a037a345d863160e9741e0e61c Mon Sep 17 00:00:00 2001 From: hwiyoon20010309 Date: Sun, 10 May 2026 02:33:45 +0900 Subject: [PATCH 3/8] =?UTF-8?q?feat:=20=EC=97=94=ED=8B=B0=ED=8B=B0=20?= =?UTF-8?q?=EC=A0=9C=EC=9E=91=20=EB=B0=8F=20=EB=A7=A4=ED=95=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/member/dto/MemberResDTO.java | 10 +++++ .../member/exception/MemberException.java | 11 +++++ .../exception/code/MemberErrorCode.java | 21 +++++++++ .../exception/code/MemberSuccessCode.java | 21 +++++++++ .../member/repository/MemberRepository.java | 9 ++++ .../domain/member/service/MemberService.java | 16 +++++++ .../dto/MemberMissionReqDTO.java | 4 ++ .../dto/MemberMissionResDTO.java | 32 ++++++++++++++ .../memberMission/entity/MemberMission.java | 36 +++++++++++++++ .../repository/MemberMissionRepository.java | 25 +++++++++++ .../global/apiPayload/ApiResponse.java | 33 ++++++++++++++ .../global/apiPayload/code/BaseErrorCode.java | 12 +++++ .../apiPayload/code/BaseSuccessCode.java | 12 +++++ .../apiPayload/code/GeneralErrorCode.java | 20 +++++++++ .../apiPayload/code/GeneralSuccessCode.java | 16 +++++++ .../exception/ProjectException.java | 12 +++++ .../umc10th/global/config/SwaggerConfig.java | 44 +++++++++++++++++++ 17 files changed, 334 insertions(+) create mode 100644 src/main/java/com/example/umc10th/domain/member/exception/MemberException.java create mode 100644 src/main/java/com/example/umc10th/domain/member/exception/code/MemberErrorCode.java create mode 100644 src/main/java/com/example/umc10th/domain/member/exception/code/MemberSuccessCode.java create mode 100644 src/main/java/com/example/umc10th/domain/memberMission/dto/MemberMissionReqDTO.java create mode 100644 src/main/java/com/example/umc10th/domain/memberMission/dto/MemberMissionResDTO.java create mode 100644 src/main/java/com/example/umc10th/domain/memberMission/entity/MemberMission.java create mode 100644 src/main/java/com/example/umc10th/domain/memberMission/repository/MemberMissionRepository.java create mode 100644 src/main/java/com/example/umc10th/global/apiPayload/ApiResponse.java create mode 100644 src/main/java/com/example/umc10th/global/apiPayload/code/BaseErrorCode.java create mode 100644 src/main/java/com/example/umc10th/global/apiPayload/code/BaseSuccessCode.java create mode 100644 src/main/java/com/example/umc10th/global/apiPayload/code/GeneralErrorCode.java create mode 100644 src/main/java/com/example/umc10th/global/apiPayload/code/GeneralSuccessCode.java create mode 100644 src/main/java/com/example/umc10th/global/apiPayload/exception/ProjectException.java create mode 100644 src/main/java/com/example/umc10th/global/config/SwaggerConfig.java diff --git a/src/main/java/com/example/umc10th/domain/member/dto/MemberResDTO.java b/src/main/java/com/example/umc10th/domain/member/dto/MemberResDTO.java index 8ce8faa..804fe50 100644 --- a/src/main/java/com/example/umc10th/domain/member/dto/MemberResDTO.java +++ b/src/main/java/com/example/umc10th/domain/member/dto/MemberResDTO.java @@ -29,4 +29,14 @@ public record MemberInfoDTO( LocalDateTime createdAt ) { } + + @Builder + public record MyPageDTO( + Long memberId, + String nickname, + String email, + Integer point, + Long reviewCount + ) { + } } \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/member/exception/MemberException.java b/src/main/java/com/example/umc10th/domain/member/exception/MemberException.java new file mode 100644 index 0000000..c10a1fd --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/member/exception/MemberException.java @@ -0,0 +1,11 @@ +package com.example.umc10th.domain.member.exception; + +import com.example.umc10th.global.apiPayload.code.BaseErrorCode; +import com.example.umc10th.global.apiPayload.exception.ProjectException; + +public class MemberException extends ProjectException { + + public MemberException(BaseErrorCode errorCode) { + super(errorCode); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/member/exception/code/MemberErrorCode.java b/src/main/java/com/example/umc10th/domain/member/exception/code/MemberErrorCode.java new file mode 100644 index 0000000..477e0c1 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/member/exception/code/MemberErrorCode.java @@ -0,0 +1,21 @@ +package com.example.umc10th.domain.member.exception.code; + +import com.example.umc10th.global.apiPayload.code.BaseErrorCode; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; + +@Getter +@RequiredArgsConstructor +public enum MemberErrorCode implements BaseErrorCode { + + MEMBER_NOT_FOUND( + HttpStatus.NOT_FOUND, + "MEMBER404_1", + "해당 사용자를 찾을 수 없습니다." + ); + + private final HttpStatus status; + private final String code; + private final String message; +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/member/exception/code/MemberSuccessCode.java b/src/main/java/com/example/umc10th/domain/member/exception/code/MemberSuccessCode.java new file mode 100644 index 0000000..0de4243 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/member/exception/code/MemberSuccessCode.java @@ -0,0 +1,21 @@ +package com.example.umc10th.domain.member.exception.code; + +import com.example.umc10th.global.apiPayload.code.BaseSuccessCode; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; + +@Getter +@RequiredArgsConstructor +public enum MemberSuccessCode implements BaseSuccessCode { + + MEMBER_FOUND( + HttpStatus.OK, + "MEMBER200_1", + "성공적으로 회원을 조회했습니다." + ); + + private final HttpStatus status; + private final String code; + private final String message; +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/member/repository/MemberRepository.java b/src/main/java/com/example/umc10th/domain/member/repository/MemberRepository.java index c916b62..249dfeb 100644 --- a/src/main/java/com/example/umc10th/domain/member/repository/MemberRepository.java +++ b/src/main/java/com/example/umc10th/domain/member/repository/MemberRepository.java @@ -2,10 +2,19 @@ import com.example.umc10th.domain.member.entity.Member; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; public interface MemberRepository extends JpaRepository { boolean existsByEmail(String email); void deleteByEmail(String email); + + @Query(""" + select count(r) + from Review r + where r.member.id = :memberId + """) + Long countReviewByMemberId(@Param("memberId") Long memberId); } \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/member/service/MemberService.java b/src/main/java/com/example/umc10th/domain/member/service/MemberService.java index 459bb0c..0945381 100644 --- a/src/main/java/com/example/umc10th/domain/member/service/MemberService.java +++ b/src/main/java/com/example/umc10th/domain/member/service/MemberService.java @@ -36,6 +36,22 @@ public MemberResDTO.MemberInfoDTO getMember(Long memberId) { return MemberConverter.toMemberInfoDTO(member); } + public MemberResDTO.MyPageDTO getMyPage(Long memberId) { + + Member member = memberRepository.findById(memberId) + .orElseThrow(() -> new MemberException(MemberErrorCode.MEMBER_NOT_FOUND)); + + Long reviewCount = memberRepository.countReviewByMemberId(memberId); + + return MemberResDTO.MyPageDTO.builder() + .memberId(member.getId()) + .nickname(member.getNickname()) + .email(member.getEmail()) + .point(member.getPoint()) + .reviewCount(reviewCount) + .build(); + } + @Transactional public String deleteMember(Long memberId) { diff --git a/src/main/java/com/example/umc10th/domain/memberMission/dto/MemberMissionReqDTO.java b/src/main/java/com/example/umc10th/domain/memberMission/dto/MemberMissionReqDTO.java new file mode 100644 index 0000000..31b9d97 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/memberMission/dto/MemberMissionReqDTO.java @@ -0,0 +1,4 @@ +package com.example.umc10th.domain.memberMission.dto; + +public class MemberMissionReqDTO { +} diff --git a/src/main/java/com/example/umc10th/domain/memberMission/dto/MemberMissionResDTO.java b/src/main/java/com/example/umc10th/domain/memberMission/dto/MemberMissionResDTO.java new file mode 100644 index 0000000..ddf8e20 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/memberMission/dto/MemberMissionResDTO.java @@ -0,0 +1,32 @@ +package com.example.umc10th.domain.memberMission.dto; + +import lombok.Builder; + +import java.time.LocalDateTime; +import java.util.List; + +public class MemberMissionResDTO { + + @Builder + public record MyMissionDTO( + Long memberMissionId, + Long missionId, + String storeName, + String missionTitle, + String missionDescription, + Boolean isComplete, + LocalDateTime completedAt + ) { + } + + @Builder + public record MyMissionListDTO( + List missionList, + Integer listSize, + Integer totalPage, + Long totalElements, + Boolean isFirst, + Boolean isLast + ) { + } +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/memberMission/entity/MemberMission.java b/src/main/java/com/example/umc10th/domain/memberMission/entity/MemberMission.java new file mode 100644 index 0000000..fb045d1 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/memberMission/entity/MemberMission.java @@ -0,0 +1,36 @@ +package com.example.umc10th.domain.memberMission.entity; + +import com.example.umc10th.domain.member.entity.Member; +import com.example.umc10th.domain.mission.entity.Mission; +import jakarta.persistence.*; +import lombok.*; + +import java.time.LocalDateTime; + +@Entity +@Getter +@Builder +@AllArgsConstructor +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Table(name = "member_mission") +public class MemberMission { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "member_mission_id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "member_id") + private Member member; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "mission_id") + private Mission mission; + + @Column(name = "is_complete") + private Boolean isComplete; + + @Column(name = "completed_at") + private LocalDateTime completedAt; +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/memberMission/repository/MemberMissionRepository.java b/src/main/java/com/example/umc10th/domain/memberMission/repository/MemberMissionRepository.java new file mode 100644 index 0000000..bc5e108 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/memberMission/repository/MemberMissionRepository.java @@ -0,0 +1,25 @@ +package com.example.umc10th.domain.memberMission.repository; + +import com.example.umc10th.domain.memberMission.entity.MemberMission; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +public interface MemberMissionRepository extends JpaRepository { + + @Query(""" + select mm + from MemberMission mm + join fetch mm.mission m + join fetch m.store s + where mm.member.id = :memberId + and mm.isComplete = :isComplete + """) + Page findMyMissions( + @Param("memberId") Long memberId, + @Param("isComplete") Boolean isComplete, + Pageable pageable + ); +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/global/apiPayload/ApiResponse.java b/src/main/java/com/example/umc10th/global/apiPayload/ApiResponse.java new file mode 100644 index 0000000..88def63 --- /dev/null +++ b/src/main/java/com/example/umc10th/global/apiPayload/ApiResponse.java @@ -0,0 +1,33 @@ +package com.example.umc10th.global.apiPayload; + +import com.example.umc10th.global.apiPayload.code.BaseErrorCode; +import com.example.umc10th.global.apiPayload.code.BaseSuccessCode; +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; + private T result; + + public static ApiResponse onSuccess(BaseSuccessCode code, T result) { + return new ApiResponse<>(true, code.getCode(), code.getMessage(), result); + } + + public static ApiResponse onSuccess(BaseSuccessCode code) { + return new ApiResponse<>(true, code.getCode(), code.getMessage(), null); + } + + public static ApiResponse onFailure(BaseErrorCode code, T result) { + return new ApiResponse<>(false, code.getCode(), code.getMessage(), result); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/global/apiPayload/code/BaseErrorCode.java b/src/main/java/com/example/umc10th/global/apiPayload/code/BaseErrorCode.java new file mode 100644 index 0000000..ae36d19 --- /dev/null +++ b/src/main/java/com/example/umc10th/global/apiPayload/code/BaseErrorCode.java @@ -0,0 +1,12 @@ +package com.example.umc10th.global.apiPayload.code; + +import org.springframework.http.HttpStatus; + +public interface BaseErrorCode { + + HttpStatus getStatus(); + + String getCode(); + + String getMessage(); +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/global/apiPayload/code/BaseSuccessCode.java b/src/main/java/com/example/umc10th/global/apiPayload/code/BaseSuccessCode.java new file mode 100644 index 0000000..9331465 --- /dev/null +++ b/src/main/java/com/example/umc10th/global/apiPayload/code/BaseSuccessCode.java @@ -0,0 +1,12 @@ +package com.example.umc10th.global.apiPayload.code; + +import org.springframework.http.HttpStatus; + +public interface BaseSuccessCode { + + HttpStatus getStatus(); + + String getCode(); + + String getMessage(); +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/global/apiPayload/code/GeneralErrorCode.java b/src/main/java/com/example/umc10th/global/apiPayload/code/GeneralErrorCode.java new file mode 100644 index 0000000..2e494d3 --- /dev/null +++ b/src/main/java/com/example/umc10th/global/apiPayload/code/GeneralErrorCode.java @@ -0,0 +1,20 @@ +package com.example.umc10th.global.apiPayload.code; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; + +@Getter +@RequiredArgsConstructor +public enum GeneralErrorCode implements BaseErrorCode { + + BAD_REQUEST(HttpStatus.BAD_REQUEST, "COMMON400_1", "잘못된 요청입니다."), + UNAUTHORIZED(HttpStatus.UNAUTHORIZED, "COMMON401_1", "인증되지 않았습니다."), + FORBIDDEN(HttpStatus.FORBIDDEN, "COMMON403_1", "접근이 금지되었습니다."), + NOT_FOUND(HttpStatus.NOT_FOUND, "COMMON404_1", "해당 리소스를 찾을 수 없습니다."), + INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "COMMON500_1", "서버 에러가 발생했습니다."); + + private final HttpStatus status; + private final String code; + private final String message; +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/global/apiPayload/code/GeneralSuccessCode.java b/src/main/java/com/example/umc10th/global/apiPayload/code/GeneralSuccessCode.java new file mode 100644 index 0000000..f4f42ef --- /dev/null +++ b/src/main/java/com/example/umc10th/global/apiPayload/code/GeneralSuccessCode.java @@ -0,0 +1,16 @@ +package com.example.umc10th.global.apiPayload.code; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; + +@Getter +@RequiredArgsConstructor +public enum GeneralSuccessCode implements BaseSuccessCode { + + OK(HttpStatus.OK, "COMMON200_1", "성공적으로 요청을 처리했습니다."); + + private final HttpStatus status; + private final String code; + private final String message; +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/global/apiPayload/exception/ProjectException.java b/src/main/java/com/example/umc10th/global/apiPayload/exception/ProjectException.java new file mode 100644 index 0000000..dda0c1b --- /dev/null +++ b/src/main/java/com/example/umc10th/global/apiPayload/exception/ProjectException.java @@ -0,0 +1,12 @@ +package com.example.umc10th.global.apiPayload.exception; + +import com.example.umc10th.global.apiPayload.code.BaseErrorCode; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public class ProjectException extends RuntimeException { + + private final BaseErrorCode errorCode; +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/global/config/SwaggerConfig.java b/src/main/java/com/example/umc10th/global/config/SwaggerConfig.java new file mode 100644 index 0000000..7f02eaa --- /dev/null +++ b/src/main/java/com/example/umc10th/global/config/SwaggerConfig.java @@ -0,0 +1,44 @@ +package com.example.umc10th.global.config; + +import io.swagger.v3.oas.models.Components; +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.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 swagger() { + + Info info = new Info() + .title("UMC 10th API") + .description("UMC 10기 Spring Swagger") + .version("1.0.0"); + + String securitySchemeName = "JWT TOKEN"; + + SecurityRequirement securityRequirement = + new SecurityRequirement().addList(securitySchemeName); + + Components components = new Components() + .addSecuritySchemes( + securitySchemeName, + new SecurityScheme() + .name(securitySchemeName) + .type(SecurityScheme.Type.HTTP) + .scheme("bearer") + .bearerFormat("JWT") + ); + + return new OpenAPI() + .info(info) + .addServersItem(new Server().url("/")) + .addSecurityItem(securityRequirement) + .components(components); + } +} \ No newline at end of file From 6993643d22b5f194a340ec6e2125dc5134712772 Mon Sep 17 00:00:00 2001 From: hwiyoon20010309 Date: Sun, 10 May 2026 02:41:08 +0900 Subject: [PATCH 4/8] =?UTF-8?q?feat:=20=EC=97=94=ED=8B=B0=ED=8B=B0=20?= =?UTF-8?q?=EC=A0=9C=EC=9E=91=20=EB=B0=8F=20=EB=A7=A4=ED=95=91=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MemberMissionController.java | 28 ++++++++++ .../repository/MemberMissionRepository.java | 24 +++++--- .../service/MemberMissionService.java | 55 +++++++++++++++++++ .../mission/controller/MissionController.java | 13 ++++- .../domain/mission/dto/MissionResDTO.java | 21 +++++++ .../mission/repository/MissionRepository.java | 25 +++++++++ .../mission/service/MissionService.java | 35 +++++++++++- .../review/repository/ReviewRepository.java | 1 + 8 files changed, 189 insertions(+), 13 deletions(-) create mode 100644 src/main/java/com/example/umc10th/domain/memberMission/controller/MemberMissionController.java create mode 100644 src/main/java/com/example/umc10th/domain/memberMission/service/MemberMissionService.java diff --git a/src/main/java/com/example/umc10th/domain/memberMission/controller/MemberMissionController.java b/src/main/java/com/example/umc10th/domain/memberMission/controller/MemberMissionController.java new file mode 100644 index 0000000..252d145 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/memberMission/controller/MemberMissionController.java @@ -0,0 +1,28 @@ +package com.example.umc10th.domain.memberMission.controller; + +import com.example.umc10th.domain.memberMission.dto.MemberMissionResDTO; +import com.example.umc10th.domain.memberMission.service.MemberMissionService; +import com.example.umc10th.global.apiPayload.ApiResponse; +import com.example.umc10th.global.apiPayload.code.GeneralSuccessCode; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/members") +public class MemberMissionController { + + private final MemberMissionService memberMissionService; + + @GetMapping("/{memberId}/missions") + public ApiResponse getMyMissions( + @PathVariable Long memberId, + @RequestParam Boolean isComplete, + @RequestParam(defaultValue = "0") Integer page + ) { + return ApiResponse.onSuccess( + GeneralSuccessCode.OK, + memberMissionService.getMyMissions(memberId, isComplete, page) + ); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/memberMission/repository/MemberMissionRepository.java b/src/main/java/com/example/umc10th/domain/memberMission/repository/MemberMissionRepository.java index bc5e108..c4a420f 100644 --- a/src/main/java/com/example/umc10th/domain/memberMission/repository/MemberMissionRepository.java +++ b/src/main/java/com/example/umc10th/domain/memberMission/repository/MemberMissionRepository.java @@ -9,14 +9,22 @@ public interface MemberMissionRepository extends JpaRepository { - @Query(""" - select mm - from MemberMission mm - join fetch mm.mission m - join fetch m.store s - where mm.member.id = :memberId - and mm.isComplete = :isComplete - """) + @Query( + value = """ + select mm + from MemberMission mm + join fetch mm.mission m + join fetch m.store s + where mm.member.id = :memberId + and mm.isComplete = :isComplete + """, + countQuery = """ + select count(mm) + from MemberMission mm + where mm.member.id = :memberId + and mm.isComplete = :isComplete + """ + ) Page findMyMissions( @Param("memberId") Long memberId, @Param("isComplete") Boolean isComplete, diff --git a/src/main/java/com/example/umc10th/domain/memberMission/service/MemberMissionService.java b/src/main/java/com/example/umc10th/domain/memberMission/service/MemberMissionService.java new file mode 100644 index 0000000..77c5ba0 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/memberMission/service/MemberMissionService.java @@ -0,0 +1,55 @@ +package com.example.umc10th.domain.memberMission.service; + +import com.example.umc10th.domain.memberMission.dto.MemberMissionResDTO; +import com.example.umc10th.domain.memberMission.entity.MemberMission; +import com.example.umc10th.domain.memberMission.repository.MemberMissionRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class MemberMissionService { + + private final MemberMissionRepository memberMissionRepository; + + public MemberMissionResDTO.MyMissionListDTO getMyMissions( + Long memberId, + Boolean isComplete, + Integer page + ) { + Page memberMissionPage = + memberMissionRepository.findMyMissions( + memberId, + isComplete, + PageRequest.of(page, 10) + ); + + List missionList = + memberMissionPage.stream() + .map(memberMission -> MemberMissionResDTO.MyMissionDTO.builder() + .memberMissionId(memberMission.getId()) + .missionId(memberMission.getMission().getId()) + .storeName(memberMission.getMission().getStore().getName()) + .missionTitle(memberMission.getMission().getTitle()) + .missionDescription(memberMission.getMission().getDescription()) + .isComplete(memberMission.getIsComplete()) + .completedAt(memberMission.getCompletedAt()) + .build()) + .toList(); + + return MemberMissionResDTO.MyMissionListDTO.builder() + .missionList(missionList) + .listSize(missionList.size()) + .totalPage(memberMissionPage.getTotalPages()) + .totalElements(memberMissionPage.getTotalElements()) + .isFirst(memberMissionPage.isFirst()) + .isLast(memberMissionPage.isLast()) + .build(); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/mission/controller/MissionController.java b/src/main/java/com/example/umc10th/domain/mission/controller/MissionController.java index 9d6141a..617a12f 100644 --- a/src/main/java/com/example/umc10th/domain/mission/controller/MissionController.java +++ b/src/main/java/com/example/umc10th/domain/mission/controller/MissionController.java @@ -19,7 +19,6 @@ public class MissionController { public ApiResponse createMission( @RequestBody MissionReqDTO.CreateMissionDTO request ) { - return ApiResponse.onSuccess( GeneralSuccessCode.OK, missionService.createMission(request) @@ -30,10 +29,20 @@ public ApiResponse createMission( public ApiResponse getMission( @PathVariable Long missionId ) { - return ApiResponse.onSuccess( GeneralSuccessCode.OK, missionService.getMission(missionId) ); } + + @GetMapping("/home") + public ApiResponse getHomeMissions( + @RequestParam Long locationId, + @RequestParam(defaultValue = "0") Integer page + ) { + return ApiResponse.onSuccess( + GeneralSuccessCode.OK, + missionService.getHomeMissions(locationId, page) + ); + } } \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/mission/dto/MissionResDTO.java b/src/main/java/com/example/umc10th/domain/mission/dto/MissionResDTO.java index 53cf207..e7b17c0 100644 --- a/src/main/java/com/example/umc10th/domain/mission/dto/MissionResDTO.java +++ b/src/main/java/com/example/umc10th/domain/mission/dto/MissionResDTO.java @@ -3,6 +3,7 @@ import lombok.Builder; import java.time.LocalDateTime; +import java.util.List; public class MissionResDTO { @@ -22,4 +23,24 @@ public record MissionInfoDTO( String description ) { } + + @Builder + public record HomeMissionDTO( + Long missionId, + String storeName, + String missionTitle, + String missionDescription + ) { + } + + @Builder + public record HomeMissionListDTO( + List missionList, + Integer listSize, + Integer totalPage, + Long totalElements, + Boolean isFirst, + Boolean isLast + ) { + } } \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/mission/repository/MissionRepository.java b/src/main/java/com/example/umc10th/domain/mission/repository/MissionRepository.java index b59d713..69138fc 100644 --- a/src/main/java/com/example/umc10th/domain/mission/repository/MissionRepository.java +++ b/src/main/java/com/example/umc10th/domain/mission/repository/MissionRepository.java @@ -1,7 +1,32 @@ package com.example.umc10th.domain.mission.repository; import com.example.umc10th.domain.mission.entity.Mission; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; public interface MissionRepository extends JpaRepository { + + @Query( + value = """ + select m + from Mission m + join fetch m.store s + join fetch s.location l + where l.id = :locationId + """, + countQuery = """ + select count(m) + from Mission m + join m.store s + join s.location l + where l.id = :locationId + """ + ) + Page findMissionsByLocation( + @Param("locationId") Long locationId, + Pageable pageable + ); } \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/mission/service/MissionService.java b/src/main/java/com/example/umc10th/domain/mission/service/MissionService.java index 1b06a68..e5d8c25 100644 --- a/src/main/java/com/example/umc10th/domain/mission/service/MissionService.java +++ b/src/main/java/com/example/umc10th/domain/mission/service/MissionService.java @@ -8,9 +8,13 @@ import com.example.umc10th.domain.store.entity.Store; import com.example.umc10th.domain.store.repository.StoreRepository; import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + @Service @RequiredArgsConstructor @Transactional(readOnly = true) @@ -23,22 +27,47 @@ public class MissionService { public MissionResDTO.CreateMissionResultDTO createMission( MissionReqDTO.CreateMissionDTO request ) { - Store store = storeRepository.findById(request.storeId()) .orElseThrow(); Mission mission = MissionConverter.toMission(request, store); - Mission savedMission = missionRepository.save(mission); return MissionConverter.toCreateMissionResultDTO(savedMission); } public MissionResDTO.MissionInfoDTO getMission(Long missionId) { - Mission mission = missionRepository.findById(missionId) .orElseThrow(); return MissionConverter.toMissionInfoDTO(mission); } + + public MissionResDTO.HomeMissionListDTO getHomeMissions( + Long locationId, + Integer page + ) { + Page missionPage = missionRepository.findMissionsByLocation( + locationId, + PageRequest.of(page, 10) + ); + + List missionList = missionPage.stream() + .map(mission -> MissionResDTO.HomeMissionDTO.builder() + .missionId(mission.getId()) + .storeName(mission.getStore().getName()) + .missionTitle(mission.getTitle()) + .missionDescription(mission.getDescription()) + .build()) + .toList(); + + return MissionResDTO.HomeMissionListDTO.builder() + .missionList(missionList) + .listSize(missionList.size()) + .totalPage(missionPage.getTotalPages()) + .totalElements(missionPage.getTotalElements()) + .isFirst(missionPage.isFirst()) + .isLast(missionPage.isLast()) + .build(); + } } \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/review/repository/ReviewRepository.java b/src/main/java/com/example/umc10th/domain/review/repository/ReviewRepository.java index 73627b1..94ae4e3 100644 --- a/src/main/java/com/example/umc10th/domain/review/repository/ReviewRepository.java +++ b/src/main/java/com/example/umc10th/domain/review/repository/ReviewRepository.java @@ -4,4 +4,5 @@ import org.springframework.data.jpa.repository.JpaRepository; public interface ReviewRepository extends JpaRepository { + } \ No newline at end of file From e2ae4e45c089f7cc6938967786a84f893dcc64bd Mon Sep 17 00:00:00 2001 From: hwiyoon20010309 Date: Sun, 10 May 2026 02:58:54 +0900 Subject: [PATCH 5/8] =?UTF-8?q?feat:=20=EC=97=94=ED=8B=B0=ED=8B=B0=20?= =?UTF-8?q?=EC=A0=9C=EC=9E=91=20=EB=B0=8F=20=EB=A7=A4=ED=95=91=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../executionHistory/executionHistory.bin | Bin 19653 -> 69999 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .gradle/8.14/fileHashes/fileHashes.bin | Bin 18697 -> 24847 bytes .gradle/8.14/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../8.14/fileHashes/resourceHashesCache.bin | Bin 0 -> 19959 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .gradle/buildOutputCleanup/outputFiles.bin | Bin 18695 -> 19001 bytes .gradle/file-system.probe | Bin 8 -> 8 bytes .../example/umc10th/Umc10thApplication.class | Bin 0 -> 748 bytes .../member/controller/MemberController.class | Bin 0 -> 3436 bytes .../member/converter/MemberConverter.class | Bin 0 -> 4864 bytes .../member/dto/MemberReqDTO$JoinDTO.class | Bin 0 -> 2569 bytes .../domain/member/dto/MemberReqDTO.class | Bin 0 -> 466 bytes ...O$JoinResultDTO$JoinResultDTOBuilder.class | Bin 0 -> 2715 bytes .../dto/MemberResDTO$JoinResultDTO.class | Bin 0 -> 2567 bytes ...O$MemberInfoDTO$MemberInfoDTOBuilder.class | Bin 0 -> 3979 bytes .../dto/MemberResDTO$MemberInfoDTO.class | Bin 0 -> 3387 bytes ...berResDTO$MyPageDTO$MyPageDTOBuilder.class | Bin 0 -> 2735 bytes .../member/dto/MemberResDTO$MyPageDTO.class | Bin 0 -> 2650 bytes .../domain/member/dto/MemberResDTO.class | Bin 0 -> 1022 bytes .../member/entity/Member$MemberBuilder.class | Bin 0 -> 4391 bytes .../umc10th/domain/member/entity/Member.class | Bin 0 -> 4074 bytes .../umc10th/domain/member/enums/Gender.class | Bin 0 -> 1223 bytes .../member/exception/MemberException.class | Bin 0 -> 582 bytes .../exception/code/MemberErrorCode.class | Bin 0 -> 2301 bytes .../exception/code/MemberSuccessCode.class | Bin 0 -> 2309 bytes .../member/repository/MemberRepository.class | Bin 0 -> 891 bytes .../domain/member/service/MemberService.class | Bin 0 -> 5428 bytes .../controller/MemberMissionController.class | Bin 0 -> 2543 bytes .../dto/MemberMissionReqDTO.class | Bin 0 -> 372 bytes ...DTO$MyMissionDTO$MyMissionDTOBuilder.class | Bin 0 -> 3607 bytes .../MemberMissionResDTO$MyMissionDTO.class | Bin 0 -> 3227 bytes ...ssionListDTO$MyMissionListDTOBuilder.class | Bin 0 -> 3913 bytes ...MemberMissionResDTO$MyMissionListDTO.class | Bin 0 -> 3671 bytes .../dto/MemberMissionResDTO.class | Bin 0 -> 923 bytes .../MemberMission$MemberMissionBuilder.class | Bin 0 -> 3249 bytes .../memberMission/entity/MemberMission.class | Bin 0 -> 2651 bytes .../repository/MemberMissionRepository.class | Bin 0 -> 1317 bytes .../service/MemberMissionService.class | Bin 0 -> 6522 bytes .../controller/MissionController.class | Bin 0 -> 4017 bytes .../mission/converter/MissionConverter.class | Bin 0 -> 4054 bytes .../dto/MissionReqDTO$CreateMissionDTO.class | Bin 0 -> 2048 bytes .../domain/mission/dto/MissionReqDTO.class | Bin 0 -> 491 bytes ...ultDTO$CreateMissionResultDTOBuilder.class | Bin 0 -> 2885 bytes ...MissionResDTO$CreateMissionResultDTO.class | Bin 0 -> 2691 bytes ...HomeMissionDTO$HomeMissionDTOBuilder.class | Bin 0 -> 2543 bytes .../dto/MissionResDTO$HomeMissionDTO.class | Bin 0 -> 2566 bytes ...ionListDTO$HomeMissionListDTOBuilder.class | Bin 0 -> 3793 bytes .../MissionResDTO$HomeMissionListDTO.class | Bin 0 -> 3553 bytes ...MissionInfoDTO$MissionInfoDTOBuilder.class | Bin 0 -> 2320 bytes .../dto/MissionResDTO$MissionInfoDTO.class | Bin 0 -> 2387 bytes .../domain/mission/dto/MissionResDTO.class | Bin 0 -> 1363 bytes .../entity/Mission$MissionBuilder.class | Bin 0 -> 2845 bytes .../domain/mission/entity/Mission.class | Bin 0 -> 2579 bytes .../repository/MissionRepository.class | Bin 0 -> 1160 bytes .../mission/service/MissionService.class | Bin 0 -> 7656 bytes .../review/controller/ReviewController.class | Bin 0 -> 2451 bytes .../review/converter/ReviewConverter.class | Bin 0 -> 3538 bytes .../dto/ReviewReqDTO$CreateReviewDTO.class | Bin 0 -> 2217 bytes .../domain/review/dto/ReviewReqDTO.class | Bin 0 -> 482 bytes ...sultDTO$CreateReviewResultDTOBuilder.class | Bin 0 -> 2994 bytes .../ReviewResDTO$CreateReviewResultDTO.class | Bin 0 -> 2702 bytes .../domain/review/dto/ReviewResDTO.class | Bin 0 -> 642 bytes .../review/entity/Review$ReviewBuilder.class | Bin 0 -> 3316 bytes .../umc10th/domain/review/entity/Review.class | Bin 0 -> 2900 bytes .../review/repository/ReviewRepository.class | Bin 0 -> 382 bytes .../domain/review/service/ReviewService.class | Bin 0 -> 3249 bytes .../entity/Location$LocationBuilder.class | Bin 0 -> 2507 bytes .../domain/store/entity/Location.class | Bin 0 -> 2118 bytes .../store/entity/Store$StoreBuilder.class | Bin 0 -> 3486 bytes .../umc10th/domain/store/entity/Store.class | Bin 0 -> 3216 bytes .../store/repository/LocationRepository.class | Bin 0 -> 386 bytes .../store/repository/StoreRepository.class | Bin 0 -> 377 bytes .../global/apiPayload/ApiResponse.class | Bin 0 -> 3262 bytes .../apiPayload/code/BaseErrorCode.class | Bin 0 -> 274 bytes .../apiPayload/code/BaseSuccessCode.class | Bin 0 -> 278 bytes .../apiPayload/code/GeneralErrorCode.class | Bin 0 -> 2777 bytes .../apiPayload/code/GeneralSuccessCode.class | Bin 0 -> 2265 bytes .../exception/ProjectException.class | Bin 0 -> 793 bytes .../umc10th/global/config/SwaggerConfig.class | Bin 0 -> 2723 bytes build/reports/problems/problems-report.html | 663 ++++++++++++++++++ build/resources/main/application.yml | 16 + .../compileJava/previous-compilation-data.bin | Bin 0 -> 55941 bytes .../example/umc10th/Umc10thApplication.java | 12 + src/main/resources/.gitignore | 1 + src/main/resources/application.yml | 16 + 86 files changed, 708 insertions(+) create mode 100644 .gradle/8.14/fileHashes/resourceHashesCache.bin create mode 100644 build/classes/java/main/com/example/umc10th/Umc10thApplication.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/member/controller/MemberController.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/member/converter/MemberConverter.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/member/dto/MemberReqDTO$JoinDTO.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/member/dto/MemberReqDTO.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/member/dto/MemberResDTO$JoinResultDTO$JoinResultDTOBuilder.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/member/dto/MemberResDTO$JoinResultDTO.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/member/dto/MemberResDTO$MemberInfoDTO$MemberInfoDTOBuilder.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/member/dto/MemberResDTO$MemberInfoDTO.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/member/dto/MemberResDTO$MyPageDTO$MyPageDTOBuilder.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/member/dto/MemberResDTO$MyPageDTO.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/member/dto/MemberResDTO.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/member/entity/Member$MemberBuilder.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/member/entity/Member.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/member/enums/Gender.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/member/exception/MemberException.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/member/exception/code/MemberErrorCode.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/member/exception/code/MemberSuccessCode.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/member/repository/MemberRepository.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/member/service/MemberService.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/memberMission/controller/MemberMissionController.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/memberMission/dto/MemberMissionReqDTO.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/memberMission/dto/MemberMissionResDTO$MyMissionDTO$MyMissionDTOBuilder.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/memberMission/dto/MemberMissionResDTO$MyMissionDTO.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/memberMission/dto/MemberMissionResDTO$MyMissionListDTO$MyMissionListDTOBuilder.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/memberMission/dto/MemberMissionResDTO$MyMissionListDTO.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/memberMission/dto/MemberMissionResDTO.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/memberMission/entity/MemberMission$MemberMissionBuilder.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/memberMission/entity/MemberMission.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/memberMission/repository/MemberMissionRepository.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/memberMission/service/MemberMissionService.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/mission/controller/MissionController.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/mission/converter/MissionConverter.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/mission/dto/MissionReqDTO$CreateMissionDTO.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/mission/dto/MissionReqDTO.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/mission/dto/MissionResDTO$CreateMissionResultDTO$CreateMissionResultDTOBuilder.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/mission/dto/MissionResDTO$CreateMissionResultDTO.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/mission/dto/MissionResDTO$HomeMissionDTO$HomeMissionDTOBuilder.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/mission/dto/MissionResDTO$HomeMissionDTO.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/mission/dto/MissionResDTO$HomeMissionListDTO$HomeMissionListDTOBuilder.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/mission/dto/MissionResDTO$HomeMissionListDTO.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/mission/dto/MissionResDTO$MissionInfoDTO$MissionInfoDTOBuilder.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/mission/dto/MissionResDTO$MissionInfoDTO.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/mission/dto/MissionResDTO.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/mission/entity/Mission$MissionBuilder.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/mission/entity/Mission.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/mission/repository/MissionRepository.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/mission/service/MissionService.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/review/controller/ReviewController.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/review/converter/ReviewConverter.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/review/dto/ReviewReqDTO$CreateReviewDTO.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/review/dto/ReviewReqDTO.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/review/dto/ReviewResDTO$CreateReviewResultDTO$CreateReviewResultDTOBuilder.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/review/dto/ReviewResDTO$CreateReviewResultDTO.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/review/dto/ReviewResDTO.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/review/entity/Review$ReviewBuilder.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/review/entity/Review.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/review/repository/ReviewRepository.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/review/service/ReviewService.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/store/entity/Location$LocationBuilder.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/store/entity/Location.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/store/entity/Store$StoreBuilder.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/store/entity/Store.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/store/repository/LocationRepository.class create mode 100644 build/classes/java/main/com/example/umc10th/domain/store/repository/StoreRepository.class create mode 100644 build/classes/java/main/com/example/umc10th/global/apiPayload/ApiResponse.class create mode 100644 build/classes/java/main/com/example/umc10th/global/apiPayload/code/BaseErrorCode.class create mode 100644 build/classes/java/main/com/example/umc10th/global/apiPayload/code/BaseSuccessCode.class create mode 100644 build/classes/java/main/com/example/umc10th/global/apiPayload/code/GeneralErrorCode.class create mode 100644 build/classes/java/main/com/example/umc10th/global/apiPayload/code/GeneralSuccessCode.class create mode 100644 build/classes/java/main/com/example/umc10th/global/apiPayload/exception/ProjectException.class create mode 100644 build/classes/java/main/com/example/umc10th/global/config/SwaggerConfig.class create mode 100644 build/reports/problems/problems-report.html create mode 100644 build/resources/main/application.yml create mode 100644 build/tmp/compileJava/previous-compilation-data.bin create mode 100644 src/main/java/com/example/umc10th/Umc10thApplication.java create mode 100644 src/main/resources/.gitignore create mode 100644 src/main/resources/application.yml diff --git a/.gradle/8.14/executionHistory/executionHistory.bin b/.gradle/8.14/executionHistory/executionHistory.bin index eb7a891b7c247eae888abde05ef837326e8e760f..92b20ae7101a9ed7ea4d2c16d5ae0d72f672f342 100644 GIT binary patch literal 69999 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 nDhA3@@p#**K2NVEXA&-|PPags~bx delta 33 pcmaFAh~?-^#tkMCjEs|0C6pO8H!A)R-)Qhse4+vSW=D?}768vF3!VS~ diff --git a/.gradle/8.14/executionHistory/executionHistory.lock b/.gradle/8.14/executionHistory/executionHistory.lock index 3bdee4ecbd80a7c0d3443ec407d594fea4033dd5..33a15e69f6077177c25c306485870ecc68006934 100644 GIT binary patch literal 17 UcmZP;n!E7*w7Geu3=kjy05!-2X#fBK literal 17 UcmZP;n!E7*w7Geu3=qHu05!e@UjP6A diff --git a/.gradle/8.14/fileHashes/fileHashes.bin b/.gradle/8.14/fileHashes/fileHashes.bin index 062d42e31efdf651184c69960b64fcb33c7f91d3..f0f5387bd73506525e1c46f7a2a2b83d3b07da72 100644 GIT binary patch literal 24847 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 Q3pBd=|JV3r^k3uu0G!+$bpQYW delta 64 zcmeA_#Mn8Baf6A3Aj^#Cns6hjOPV#43zyl5!8xbdgXhPPv6@rIpZ5E<@y&b!n~Z zmXdN!B*N}SD5aD`DYI$KzVB0KJ^Kgj+4G%qX68Mg_jA7UKA(5yr+Hsf3PpnUnS4;b zKE%Fm!WI;O0#E=7KmjNK1)u;FfC5ke3P1rU00p1`6o3Ly017|>DDZzNuzhYJONhlt ztXaU_5IRbss4tz{Pzet>Yh>IZ*+J~KP(%M8B&dg+Yj-OuCb;!=#4qeo){m`Kb|Sd> z7~)xl0V>x*x85P=2qIo^Ugu$XW)}~^tvtSPcEw(LdUq-5Cm~*_{bu#us>pJJTYf~m z#IP;xyX2Ccq~D8pMTJOAM%=JH!L1)5UVHV!niHL?(+O@Rh4{^=^{+;G`#eeh9Pt*n zoKuCXK0YAlBp}|gC-wZ{Z(HLDZW)01Bj(}*P1NGwNM8l%!^(}BlKW8aaSgE)`uK8uZI$qxx`)qwaC`JA8=49)eVzZG#>hzd)RU#5`Y zmWf|@(Gj10_J$V;Ztjh^NSaTzbmC|wIX?n%N#}IwPUZJP1h@7_T=r!CC663KUy=(T zPT$Q^>N_HMli-XT#McH=X>61IiX`_$Ttk?>oL%GSL2!#8#Mdp{tvJ~7+JxZdxnHd|$&w zLZi@mp(5@YD6geB`gDRk&M3sgiZAjA+TE%l=ky?s-YFE`6~sPxg#u6j3P1rU00p1` z6o3Ly017|>C;$bZ02F`%Pyh-*0Vn_kpa2wr0#E=7KmjNK1)u;FfC5ke3P1rU00p1` z6o3Ly;J;izYwqB<7yk-#pET8%?kDY9A3tJI4TAI|gHz_9%s&k?=5*%c-mb>bdwC}& zB9n)4BXXdUTKRowqafgXZi)+z{88^l{7d zv#t@9Jt=n7w;MOAFEeZxH9BZKYvLcC4mr|}8y<3cDIslaTjv}1BV1j^3UEU{>a0nr z(cQf+hU3jwlBT%V)X!VX=h`%PRSlinqlc6p7%$?_!VPATjCO>oCTIDs!_jvK1K7A> z=IbS}#qv;S;5&U&U(bPN+!(a-k|`+_8cO<{(GzUVI)WRQg}?6^8*NjwUCPR*cdz2! zkuvW{UoDe!eU_hatxeGi?zRiouP7 z4br#PsLH?W*Xr2C5$@WE8$&tcy#|fun~P!^ g1!VSc@Aa5>ZdaF?R%p$1)c?u%qE*q8{&%sz0IndNH~;_u literal 0 HcmV?d00001 diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 457d5a239712e11832db1a7e323786721d40407d..ee719efb1bb6107cc1d46fb27532c3417354905c 100644 GIT binary patch literal 17 UcmZQJU_N?ehOz4c1_&?(04f6mr2qf` literal 17 UcmZQJU_N?ehOz4c1_%%V04d@Fga7~l diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin index 7691946a377f9c235dced040546a2a6863a92dc0..d15be2b088084d9f00badbab0434fd04248204ce 100644 GIT binary patch delta 491 zcmZpl#JF<`;|3E6O_}yzIqauOy$>^hfk)?mDClAMnS0~R=TL~a=kCd_5*8X$QqMAl z{QXq`5%gk)DW2+Orm^SN%3i4Am6J;)6a?nHb_?mt+q)Pl=s&qvLP2Bky9){*CmYH^ zO;CrKu&Vp}MbludYN+DG$xDGI>FW^(QuE+`RlVG8SrrD9nUw z@8%t;o^(MHs`x%k{P|>VlRrPSCPT&9Vd6jkubtA+AiEPPE(sIo`rO<*_euW@sQ5>i zIDem)u2~#|qB>Nf6(%9vIj_rGf60BQ`1HwdB`gHA_9{QFo~HZ_DyThKR#L&nCuU3g zQsMr2P{CrD38~J(+pSse1VhEo!o*=T0|V2>jfy|SHyUJ!PImM-HhI4X@8l02LX#6b N%%HRflvY8bSpf#V-rfKJ delta 79 zcmdlvg|U4S;|3E6LGJcnIqauOy$>^hfk)@$SP6^CMo literal 8 PcmZQzV4VAjvur;A2(1Fo diff --git a/build/classes/java/main/com/example/umc10th/Umc10thApplication.class b/build/classes/java/main/com/example/umc10th/Umc10thApplication.class new file mode 100644 index 0000000000000000000000000000000000000000..2a65d7f5d9b4cd8773e50be7876789c6610f1972 GIT binary patch literal 748 zcma)4OHbQC5dJm~971@7mPet7UQo!P3l}b_kZ7cy+)_0qJ@m9Ti?h_;jn-?(-|DFq z2Yx_*6k^sOVW~M_$upYQH?!Z&zx&%e0H=7{Mh*1SZ+Nw43!`2wFJ4#sM#YvTZX3L275FP#a?>bFQy81V5iYlj^>SHw-a2hD z^ld+7c#!{3DA^Q-kv#;T)+~akNyj6frlb?a0mBc; z_8dnDqG*kKq9uf~`2&8$4Vya^W4m-9%Bq8f$KhHC1xj7eaS`tmw~9~=U+>Pf;OC`N z>44s@Vyp85|AlZl=eZ31H;NB+T*5SiZVFo{(Rkl%!uy&A7L{ueg*0aHk%n0vSMV{z zc=JH$0fwPv%dyl7L;u|T9>Za>hdYz*B4SSVC&NIP;A45q5zp#=*6s3=P0~-~WtrQ1 z+_n65v^k*mEw580Xyde$*WsJ?Mt)3U0x-DTw<3hS`~+@ zx=U8P{=Z$?t2qgIyF&h%+NnFrs){|!v&j9cjw2OU7G)*Ft-N$AhF9~0?746DOX`1OM@@b&8}tGq(T*|FnGl6Iz{G)@omG@?-*`(4OZZ4zmb*1;;Xmg zk!Ed*ikENUQrDz5!s-|sx!g_KC4Y?lLU=KX)SPpa5dRZ-TUJZ*MbxP%VG`GLQP$nE zcx?H#>s+W-vs<|4+sAOHYlG+$sG8Razn7~)UNjXSj@lVYT|MVebG2@B&l8@8Ck*$J zlBB(owtl8stDlBE!;RkWQ}vCy3=P{14|_v6Ua&NL(K8Ppg<3eDN8GSz*gYMaw%jDt zwlywO+c`sBF@4hf#*=0PG(U?^s5PFW)l>9SvkZ*=0+#s|+QM%*^9SDfiMIMMPk%@0 z05C}~=LujEnP3%M!2+(*iZ0_*Tq9V6=7WqDz;$~1u!tKp4$)7a(Rh;{jnU#3O(@QB zyEBQY1QOGMEhCujKw=4Znk1I!9U+Ok0f|xi=^j1VufaSlH_6-&$Xq&!%m)c%GDPMo zc_h;tnU$E#gU)2G;30Y4muH2X==(aI`5l)t3$LO5Osh~C->o1?n~J1kMbd%Tu_7ZF xr~ivWCDv%{$9e#>5wMvcz(=%x95dR)=d`{+=W-MwTbRN#6tF{Mk;X4E^$(gh@Ad!y literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/member/converter/MemberConverter.class b/build/classes/java/main/com/example/umc10th/domain/member/converter/MemberConverter.class new file mode 100644 index 0000000000000000000000000000000000000000..cf85f80e45b401752834dcd6aa02efc1088b2370 GIT binary patch literal 4864 zcmcgw`&$!76g`8$LRdv9ifC(9P$O-LqE>5sgIX*RDu}i3kc_aJ>_W0Z?fYqK-}e2k zt$jbW?YHIY5B&rBNA>HO-3>{6G%Jt7m)xD%J9E$6x#!-Q{Qb|Le*xHy-$SUt91WE^ zs!%O3|9E^n9!bT`;Yjb$ahb3Ms<#=YVeb%_6J9$QLJev)gmlzF7l<+K(xz6FO-Yk2(DWW0F zL%oLiIu@WoU~Bo=lD6d|IV8ur26|f$ScXX{P$daECD2Gz1t0X=8N(c=p++p!ut*td z64+keP|2!GVGHz!uQV|ezG&95L^+~nG@i|#v@%JB`$pB-q+GR3$Ib3*(@2~!<7ug0 zuTY)t>lPiY>UG`dh-J!yIkkIAW3}pcHNra9qKy$TEKPR{I|6QDE}f0+cgMJ{yj9I} zo4{B&PyiH-o(V5SbgaXA?)Z?Au}1`&@;h!DX&LFU67f`5+?FoV4N7;Tz@Wclm#Iu2 z&h6N&VT+DCuvK6|A@I6QTMjFhXyfrzPWB!XSQPFq4ozRfg}F_~c95Y}qYP(KcAz-G z@`}?3+lXB{bH*O!J4Hc(4FLn7Ccho^XhK5dCZy);Yw!li=sbgfp8`)4Wo)lV^d>N zc`GwUpYo>Yd=pv46b9goF(shgam5H*G2)bt(~2|m$cVn;@^0c$Ro-2t$8|iR%6l!9 zylSn$Kc$NG(*kE_rC48)kpeBP2G8nvP8IPQV%?+axPp2{RqGc7%&U?%Iwise#B)~1 zOL*DC)8`f8h52;j)`@%-Rybc(<@z;&RB`6aE6g5B6K|*tcTQlYvsxf0nRrWOwYR67 z)k>^HHM}bjEnjI9mN_mnHg6){_|AM=pt93SN`d+wBY)lAMu=^BKm@EHlqzOO@s%Y|IG0>QXk5$4v7F2@7i|l$jBA?aJuxQj z5i8jj&+r~W=h89twxw=UlV>P_T#)sZLYz|cmzd=$tJD5vbA5nCmfClhQ4(nX-!e+f zav7n1E0;;geTE9jM(^!p^tP+J0*^S|rYSR>DPH&__h7E4R z5ylSc6_D<{5@`j#;bax~7T-~JaKjsU$oZZtn1>(m6DRJ%&$vh#lWsE3b0*Pswv?-ysNFqr8BbuavCXkw+0Og{+67~*Ouq8*5)Ak*D z(Ff^8GgD7zxab4)p*sCml0hL3al*y=>>lko=R3dafB!rB2f(-ZA&&tJY8cXyK~`Y= zsr}qG8@793Zp*6Y*95Xlj_ZVX1qMsyyACU0ew3 zX3cBbj%zk$b6@&qE%eOwXuB<+t?X{jKK2}!R3IaHuOU#VoEY5+eaAhpl$rN*j42zr zmK_8?6N+L^=qN-?*Qp-5c2g?m1szk0Int_ouH0xVyNZ8N$0Zc$!GUyZ(id2$ycw@_ z+s(jy6iGxl-q&#%9}w=o#+WQR#wGgFu&-NX4PMAYs-C=B& z&XZU6*}4qtUTw?vS;L|9sqsRoN4le~TVv6s!vYn*G6Ynp3jEQ{4V*6>)v_c|(A7r1&df&8`` zc^^kI0U$8E-^C>GBApD!eeNAfjyRRiRoksKWH4Ltyu)_OIx9`rTWm42jBve>j_3Tt>GaQ(#l9{Rf8XxI_Ba`sgw zF?Jn`oWBDcDp}5JJ{8;*)HshQCwN3Tv?IzP9Z`;1(mXh8VNiOWr{735(mCUA2xGnj z&A8FQsByD{aiciY!K6{lbTDlcvmMO5;LQQt;BS^%fMML^?`o_8w_x%_T@fPneJ;YJ zaL%cB1%uH};Tno|3Rx!FDQsCRa9_+)928V8fiDmE%7AYKFv0o1NW%)aqRND39N`M^ zC%3O6)8i`%vI&m$+dagu0e|!*Uc#qI*p^6@TRCI?h`zl>emcH$9GDzF!{-E`+{_3b zz{AL~OD0dsrHt_xw6h$_BpL;y)Qv}4c(gy^LQmoG{)DG`3QzVYd%9%6&v3e=o~g-urV7PhgA;{S6HEY<)3 literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/member/dto/MemberReqDTO.class b/build/classes/java/main/com/example/umc10th/domain/member/dto/MemberReqDTO.class new file mode 100644 index 0000000000000000000000000000000000000000..d98a96c802e5e47e23da13b6b430e173d6f13f89 GIT binary patch literal 466 zcmb7A%TB{E5F9s24QZec;J^`y18~5AH~~UJMM$8~N>KIgBo=j**pLU}w>Tkj-~;$5 z#3uB>wYD@nGi!Ty{r&U#1>g!>K3Z@%+yEZh486I0l_HhqNsObpic5y}g*LjpWN`NO zryMH`C$Y_hdXw36szjB=$4BK%BsP=Uh)iXX%0*IIao^Af^>RHKGq^*WD28sRjT%+; zp^1!Aat5J|Wjd9)uJyun%b6}1PQ&F(oiq54w#s95qwDwk|NA(s=VR!MR8ju<1;>El zZ23C7cUGHbwBXhll@C){6pEVWiv)JS>38eJXw&}^u96as2E2n0uy-v9t}6#kUkI=?uAC`v z(#L3L=+L1veSkhxr$=6e?8aLrOeQ~8($OA$=kgsL{qygezX2?wS;PPa9SoH)j1h*3 z7krnyJ`bO}>#Y~U(+ndwWGMAbhQVrWYZL{HIw+R#0ZI&yJQcX&7ar{R!tDm$)hl}2 zZL5IG&<#Y;5|P{1%DvZHJ{0lt=KAbiB|}2A?`OTf%2J zm!U90V{mr4-xcdWGh9p?PZ+M(`mIe-amFr&~OdMz)(ndRr3GyYG%jF);irtTOb?yUNVfi}dmVIv zT|V3El4h~j2hI9z`&(eO@e$lA;x-l?ESYQHV3^$xUxvG?BitklNhet0o>tLIhF{ZF zW)%~^S9#d>MLgS7s?*)6_op+plR3Ega!2H-KTGN7bS?|g;J&{hwIDi6Ya#W9hR@?z z(0v%oq={iVBipn&SY^1-7kXYq4(>9XdABOPo=N!BnhW&O0z)*?(+P&pNgAQKO7nnu z&ieM~?dsd3r|ZC;L+9!3CX5=bT>8t*&fIIT-+Rz=G#W!7!(D+H7EWQ!4{-4Ol zpFA{vl5>l1ge?9HuIBkaeQ5lIKZ`%phkp%UQc4YxOO~_pUnoDBdqoty!Wey%^i99U zseD2bZp*pceub|sc7w{$)IjAR?w|PN4bB7a0!{OQAcHsQ cyMbkrPEiuexQ-uCp+9A;U=(+-h96P+57zmYYybcN literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/member/dto/MemberResDTO$JoinResultDTO.class b/build/classes/java/main/com/example/umc10th/domain/member/dto/MemberResDTO$JoinResultDTO.class new file mode 100644 index 0000000000000000000000000000000000000000..546ebf2a5a4097b47d81590c202623885113e674 GIT binary patch literal 2567 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 literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/member/dto/MemberResDTO$MyPageDTO$MyPageDTOBuilder.class b/build/classes/java/main/com/example/umc10th/domain/member/dto/MemberResDTO$MyPageDTO$MyPageDTOBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..4f00c482c3d913acf033089d49cf28a49c58d45a GIT binary patch literal 2735 zcmcIm>rNX-6#fSA1;;7Zl3>#`Nl9yylugn$y%^F2Q-UQEqJXH{{^{5r!Nj{W*6x^= zH|b-vQmRO))CcH8RXwx2m^HQ#739avo;g1Ao$H+AfBt>@H-M+8v3Yov_sxOR z(jJ$}@r2h9zSA<=*$T;*B3R$uUfeo*!S_WUwbqqxOZW`g=u)jkmefy7scW@gv8vz8 zV*-;Tr)0COxF;B<6LLGom$Bq@9y3-lCCC`p-hDrhIb0)7M@vP1%_J_?lo9*F4|UAv zQLw&U@x`GOzf^TsnG6;fRxaXf4n^FsLH>~8$5KLd=v(3(`*0@b*xZCr2vgphrmWt| z<2F8GxaRS;sA|>Z=6h)lhzbl>CSYj4GXoM9#f~r(Us436Cu-_Y2D0Ibr%GwVjUI`tqQ|fRktX&6LqP?^RBIN2iIGJ_AqseI`=Cbxt+(5)BTr*byJCr6q|wQ(3PUvVp`<+!3QUrnlEA2-93(#5bT z9a*EJXfVtY+DU)tm0E5`cm1Z=khWH)l5J<%N)yC$5tvOK(2M?(;o<);7-~#wTART5 zyc1cdfal4imR%0+~HQ)y_?5f%+g_>vP9UPERpCxtE@bc#!3#Wc$~qv z_JKcPSUib-;#-r1tZfpxoWv0SgdQ^?sh7J5lwLVF76(6 z#1QeH67tdbs3g-ALsYrz?nomjqxqVmM_+Y$5C|&#@m{nj%so1eTn67U+!=6rm?s%L zW4Lj)C=IsAZQP>aFhYGZMLSJ3P+;klrtcm4j@XGaz@ynRz@zChz@tfWikA&Fr3v?A zq8$2_SxY4TL%k&q4>knYfABJT%|QdYnIma zH~3(9(xduW7+OCM@G!<-rwX(91;QG@ev6yHS?Gl!=qY?gcq90{FDGAwyhr$ozFE>( dq4hQW5hcx(sUjX>4fFI%5mk(1o&4U!{C~o{bxr^P literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/member/dto/MemberResDTO$MyPageDTO.class b/build/classes/java/main/com/example/umc10th/domain/member/dto/MemberResDTO$MyPageDTO.class new file mode 100644 index 0000000000000000000000000000000000000000..4c2b047824ef0895a3733522daea322ee76930ce GIT binary patch literal 2650 zcmbtW>r&fB6#f=$WE)YiF_cT2KuTI$BvDB3HKpa!1h+O2Lur%#lI&H>Wj00I zvR$*y+jZ`l%|Mvda9QL2*1_&l_2r&*#A(Hlig?OoWukI!xgy-7lC<=ej&V#7pKCXc zU8~I*athym;Mp-}PRFF=OmedANZBbJ(|DUsI>L4XhDk-R><0XZd!db49dpu^QIDV4 z{FhD9bps9WFjNQe?cB?auI)6rm%%)Sa}@L2Iu@`>VZ{v!U7Ww%Q>_>Tkhk-M9{Ly&$YqwL{(np zK}$6EERTvg;2!DJ>QR9(JS`Ll(toMuN(}QgDrdXR%kGKo+vL!?>x#e%Y~hmaT*VRX zx;QqUaF=^lz?&qJCm83w7{@v6{xZXqniC~gOk8Zu_!S*q&=!VYYEez})5MV37hSKx zAKNk!S#@eWkcg<1ceo#H3!gglYlcVvziX&y`*Uq#Lx{i+JgXBW#ZO_2q1YcurT)w* zg(IaDj**fwB*rOs^o-Gyr6*6%%=iet%bLvoFa8h&87bv-MkGl~aRXygyk zY)T?0uO?dMj3lFkXWh%ROkuy&lGl`#ofh z*+dU{V>a2t%q!vD!<9sm2v-tI z5)WxTl_Vh$JBSf>Igrga!xCKZ-)r-Z@3q4|qy~xt-@yQk9cYxn-BwoO$G455O5_!s4KE?b0B|jbU zoCPt3&+s_`kikhZ+DK8h=8&&Y@(ikx^{>@lb`wZYDf=rEvCU!qX^S z0Xu&);khe)p1Fx|5~~!VA$&jvTr8jd_#wpTO!z_K)q_9s_dVoXxh}nMu{CH9E literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/member/dto/MemberResDTO.class b/build/classes/java/main/com/example/umc10th/domain/member/dto/MemberResDTO.class new file mode 100644 index 0000000000000000000000000000000000000000..1538ca9d10b3e1098eca7b7234a18bf18fadc669 GIT binary patch literal 1022 zcmbtT$4#fE}qunEHTe_6_{gKBej z1Wt7)@XXZ?zlqQaVu3T=2~4n*6H!|rp?K;z$~&^8?<;;w`ObY2`Vw2>IKjYe(8=wv zjV6}-z=@S@7>h8tucD9m=gwlA=SajckX?HNy)uwOfo(JmPUvM@jK^8_eH^9H&o+et x46^U%%pr_m3?)or8ncXT#h8IPM#i}8Jo`!Z3v5R?dy#odJhQ}pnz3c%zX6)-AC>?B literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/member/entity/Member$MemberBuilder.class b/build/classes/java/main/com/example/umc10th/domain/member/entity/Member$MemberBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..504bd9828afc4dc524878a60ef583ba1dc7bd27d GIT binary patch literal 4391 zcmb_f>v9xD6#hE5O~S;40KovpfB`olW`cNSxg|j$y5W`>1ia1eHc6A&nRT`|$WN<$ z2p>bMptP{czgGDSK8xk)%aWPQ7)RD0J>7lw^mi_O&grv%{Pp}d01Ma{L>IaX=yA}C zK8BG;-nQrZUa;ZbtUTgX$R{SB|#d>lqKb@q^hF-;6abt~}dToGS&Fs_LE8k=FjZ?u$h zihk6=F}y}*Zty_sG+)kRRIA=}ujvz7-PavV;y9^W5s}0vN3`Trg z@W*A*q$Ae3Eh&6gQA!243~nA1WA`?QIh;`;@;1Yt#hAwWzG8cOH7`lYqgBlDS>7nc zM7Q0U#izYye%SHN^!gy)!Mg>#=iq&OkVpq(8AD;)^IQDpLxxjvN0@9WO~=GrUyM?s zopVsad4|JvZ;LO5LDiFYh1{f7Q+k1HGW;F~`+vQwG!b7EMv{`9ctc(vyOWRe9`(^-8#-R{9fs3BE4N> z?&!ELT_nVwrLaa|!)4LV^)-)FQSwzbu6vPCdrRz*n}T$^w3n!VFJ~n7cIpzXg-^2ZPvpio`DXE_Qusxbv+z&l#y7cZ@rx<^S*)N( z=hsR+zh*RkcaHp0b%5ap<(En00{!W`OcX0|mL!@YadX$r-@xEW!9+hs;YC2urlTSg0u9~ zgqgHdvz(#nIX(pTl722jdN0;UUKc)1_+ees=5Uwhe$wbZjnD8k?M8{WpZ@217(fLz HJjD3llm-Kk literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/member/entity/Member.class b/build/classes/java/main/com/example/umc10th/domain/member/entity/Member.class new file mode 100644 index 0000000000000000000000000000000000000000..13ad4b7d52cf4c8ca83220947f869e1e50956659 GIT binary patch literal 4074 zcmds4>sAw27~O|kNC+~5iUGXPqJ^MDv9*_|6%cLOa4Dp;_C|-~7)FwrbTR>HU#eZJ zS-R?4eSkhgU!pJ2)qTzkki@}If0nhvxqWAU-}x^4ocZ&g-~RwGho58UKxYJ9ade|c zVEC!IYo4jK`f3w#064$r<{_{%yOk9 zQ?+vb<_&KMP870*PbQ#Bd4&5g2it#-PAy zZBEIwi>Zw5$)a=xBD-d(CRd&aoSV!91~*D*Q_sY47Uu-ID~@GTk3%-5_^LAo&vVZ76qLjN=k63v^fo0i(fytYa6om2buI zHYRALq~l5ggAGFKo@)hSSL1j`iS<^@YIVBN5!;(ovjOww}to7XckPq-VAKoa>tVYEuk% zF~SU5t1-RGa>J@xTO~PX+m2^?mSa~1&eNh)k#=6DGKI9jMCcNaC|#AC z8!EFX)?4+|xVYbD2leIlD|$!f!Qyf*lY1;M7OG>xDb>n0vAa~PSPp)bY^vOd>u7D- zI$Q#mLje}K>|05YZe0Tc7mpPU?CM$1t!0)UF%m)fZJLZkbloc2rdM-m$O0kA3Wrg- z^SaFN!+B8JYdW~;do<`$s39x1%sES@y{~*)HY*ibn5R#B{Ik=jiYr(B7|}5cPJ#9e zWUYhD&6y0XstQF`8>VZiaWL8CZCi}>&DUA$t2waNFI-v@?%&lzQz#PI^6Oh*j+}Us zQfc72W{M!%XppQKdp9Iq2eT!oyyfhuN;?X0QFL8r8jyuQS`Ju3;FMZBq6cOJC;TcGm_6Zf8<@ejXWplT;RAb`Zy6PTrPe3ovj;*= zbj&)S$imSr(a)iuVm^Ny`rRqIL&(*$VS@nE4a#=iMlK>VW1&Ie(#6xx;Rq+Ys__*L&hk8BemJbHq@{JJe z?_(Qm$WV}vgkYhc?Wg>GCXvMwmw5B*y?j>bme0UIv;kw8g1q?oe?<$eY9p1v=lrcz zvCj9MKn`OR`GO+zYz12*`2wPjNV4+<`s*0_Rd3(m|5H36FpCIoVSrYA$&u2`J@^Wb z+1}@`hcjQZjp7@88(?2%tNwalV)*fMBz|FEKw&Cr5be95|Gi$>#1FyF6xWqRck(w} zP}@2hww-SMKV;)6Xfu`F6m0>gaRhcvb z-EIY%2?6rU&uPi&^s$2IIH}&YAqN0fIDKhHSJw-=R-BbJ%!;kFyG?5`A zt#ZcY%v6ku4XQM#%%B>B3JlVoL1r=d$!O3}gBy&1z^Y9i>{4HPL2U2wxIS|=d+><4 x6jOuWvC0vzvQ{Hybit!!2Wpzj2H4x>c#rrb@^w7ppo@cH?6Visy}&suTLQc+dTJp0K;VQz^&C zc02UB8`!?^4@G2)pzC++XCi2eC<6x7goZJ)d$mTLq1+gaqAEGkCNh#^Y_~31D5#qAPFp z6+iT7=jlJ{u|`#$A>Rlc?zMR2O4tQHN@rsEB?eKM3t-oWOleQZ@JeKYJvj@Wgj zI^+GJUzMY=U7?Garawp7o|E$rkfj+0as@fKbfS@8#1i4|k+(=zK1L75XG~mT@*{Z+ z_vt;BoGFB##RH@g{5n|~VdUBJ1+HC!Nqp)re2I35pGJlS_PxSdeCLIrD7YS1)g-1DHm6n}^lyin0MM^1KvY^r%n9{z19Vk60%>%Uu zy?M2>G%6?$!fJ!Cg|8Hqzonex_8FAKxuYhIeu2AZFl3p1fhLmbRgzUhfxc6NdLCnq IFe$A60uxLP8vpz&$o8~m)NSIfRzf0b(ByRxQMNh^rXxrB{?(k$*~{Fhtv*LD%C{y z)pKf9!itzCUfWFeogGu`J99#ye5Nz)+XCl%-R0b3n~=OxQ|dTp-8G|Ve^9}yK$K^Y zSfg|%4VfXig($smVj)Q}SP3+`I-}cJP~WRz%1oAkgfQAK9d@oHFFeakko>ow=B9bZBDxPrpZF^{B9m3QsgF!JB8w zsLH6#ci_thhp!MXToq8`Gt3{XC~>vM)y|I!b*wXDJvPu_rzY1W!5|oK@>xLZ3qmZS AN&o-= literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/member/exception/code/MemberErrorCode.class b/build/classes/java/main/com/example/umc10th/domain/member/exception/code/MemberErrorCode.class new file mode 100644 index 0000000000000000000000000000000000000000..8b183b0c61cdf6a2a716a2909ccf23a140682522 GIT binary patch literal 2301 zcmb_dTW=dh6#mASti9Q`uIq+eN(oI$ZMV%PkkEqDkV~C5;9OLL1%Z&t6FeaGp|{X-tNP4eiTMkNGrOjB5=)H~BCRJgbIx~e-#PQwKfgTz zFoh)rA%@AaW9i~!ZmpR@uUqAjVQ*EhI2Jc--4fP{aOt)z);z%m@2N zR-xg50#(C79Ab!;O~)1tsdT1rgRgVlcHJV+ z*11_1i`N;((knsj8pkQ56=XDIrJDnLaE>AVj14iIVdxAvGCDlEJQBkY!03`>Vc z7?#`lxu=BfPR{O=Oi9{$L&GS>B=7w4Qc3dZ%>TeV1?L#fw`+~6>8x;5=WE6i|HO27 zCFr_oUK7uHj*9i4I}zD~42KGaEf(ssU$62NlTJ!)vXj|=%SdWDWp0+ZYe+*)YZ05s zDF=Y?R-MWcmt6IPOZkddg%|LY;S@F29ypUD8hfh-DfeBe+n!;GIeXox8DwtCwjClp z4I{cu7EH%lac=6Dge_d|i3({dWG~3c_BL)3nL#Ci`GEek85GofgMs%4f{o)=44a$e zdeNxb)QB!cR!Hy3^W8k!eUd5BJR2{Y&2|f?<-u1ia&jJw@4r+NxwaU4AsFRREjo3# zEM^T!rqqt1KP0E$9v%xP17g6nxU29BJyp3dUpaHc_Gkj zTcG1Rfl@C33dyO6h@Ynq5%xXq&YnK@2(M<(ZlWvO6WK&>wkNuY?~=6 z>K8;S|C6;0`)9J6!L6)k6f&nrqqvj+F4NbI1ie2AdR-Ej^TFS3O;5U z1H6IMhl=umc;EqwL?wPe+YnlDQ=j=M#Qh71GrLB0VoQxgBCRKL=A3WNbhKY2O^{mCK)m)RHMw!T0Gz>~D#ir`CAz!PQe9+ciOc^#d6oUrSlDQnSW-vyd3u2 z46ll&j-yij=Tb~|Aj6S@>4?Re?AQ1CnnjWi+GHqm5G^CA^t;hrh4YTOrdh@1?` zqVU(<@-mlP^@T@S>#PVr7krb$oEgUN#^)}>rql>O0+a;cWwnrDbP zQ&Os@W%Q5A88|gg&2p5!HxZxelkWh%FDW_4f|Z6+u+rE8lKpay(>_7#TbLlLw`q5Z zR{5tsg7OQxoWuGAV6in(zcIi)&L<_ZWG4SCM zN#YC_KbO$&VyXeA(@uiLvp=I}FHQ>2apLr9%GhS;lU~izN^czUZGigs0v&rH&|F)f zlY4=>UjP)56B4l?Pah*1c-)&kd*U%(&5mrNC)*d>Mt`<1zKxR)DT3y#bq3g3vIf;J zj8^_9YZ(n>vYO$ktY;iDr^n-%PXbry>qU}Yp(MRANh}25?=`0@smhT`Ns~n%3V?vF z*dJgYMjs(slCkctdIDEbXc%08Lg&E1Z=|0(O%|`E&Zb5lL*GL53C?XnkpYDODg`D9 R&`nf}G<+#ykz^4p{R_e{Jw*Tj literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/member/repository/MemberRepository.class b/build/classes/java/main/com/example/umc10th/domain/member/repository/MemberRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..818c632041b793fdf9a3d8b376b47bf0e0e57b14 GIT binary patch literal 891 zcma)*&2G~`5XWazLYgmHT2crni&J{Z(gPRLA|(8YJBo0yvhn2N|&Hm>%AO7|G=RE*);dKcL3@%))INk~s`p9GDp1rkG?r9}t zz!j=78g4Muk+j+@`E{xc)Uzi zckT%*_$(B8&#O>u3>nn%Rz^1JEk6>2&!ExjZ~TWg@#~y^qpa6xr`r1>5_5|tVo=2F zN!>%Aq{l5rWbNuWumhY+T=bS%ZI>Q{H~Ex(og~aLqymHetUF13b3isy;Ydbu>|-|w zv=vtBfS7pyfBWz?Mzict6?5Uo$lyGpDqQQNkS%jsxiMNf8LeX~izym(OgqD9OV7D* z-mjP{RKzyax=&klXS?ZgQ~!~W@zjC%%0oE`gpCa`-sSp|&AzkS@v*s|_y4_zNKLk@ z9qi;XrxW==XqBOkjf8}=O}_>ctJufF>hqb0Tkebv;w?@SLwI;2NNs}+5i9m literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/member/service/MemberService.class b/build/classes/java/main/com/example/umc10th/domain/member/service/MemberService.class new file mode 100644 index 0000000000000000000000000000000000000000..a7c78cee4f04504646f33c1ddec61a3b7b65c459 GIT binary patch literal 5428 zcmcgwXCni7-P%ewrMOcF&G;Xu>=Th(#0L53k-~AK4%lb#z-gTZQ`)BebZl$&S%@vhIS1}9UagG9@t&D zC*3tOFCzxC;Yy$@G;>Cl9MAL}cU|Co6WX{{`l>}02H6hWhE5G#I^Kblz}ek(+ku@5CJfoxY>OG9$gR z zQOlEa%dT@xU@%hVEf_WkkMeY%j-%)gJRPRbxV`B7Up-wXmYx#0TY>htjuXfTbmyJ2 z?a#-d1ePlp?1)rd+kWzQ2jK8O!dp#bRu54}yCGno@%GGEd0 zQ5XVy3(}H4W859LwQ_;Xw;?Z(n0h1$iA4=dI+kJbTHJcEkkJ{_HvMy~rhP}}HLNz( zJ;>{M8C2xxnjEdH+fjtA!O>B|RocBf(rc{pPN8y-kGihoj&MztCq^fRM`x}~PR(7p zH1*izMS(*P#f#%jcTDla4K7%A7NO%hbEYjP%c|R(GZrkmGL>`khBa@vrdmgv zd;De76L_!*pEm5ZvI3ebua>1pSDtBtOI-gti$RiP4xt_kTc zJB4Y(WhG>rOA`;wFgwknoHsp__Fu4V$2U~3z;CB>j=PlcN~%IGsw3ANcQxa?hV2<) zKVekKGjp|Vb|eDrEM*nBbMbVHF4NtUAnubOrXjnigP@46SW6gijid&bs=)Lul3KZ= zDNzp#OvSEr0|~Wa65SU}&1T@gLth*u)WIlFv@YT9eg zs?6j9=Tfk-$ZQB+Qyt8z+Uj3%bVP?jJ;w~YU`a2XbDY(3DI0@vgqhe*-N8BfBTnA@ z$57eI^DrasO6*4xoi&;~AY7~8-j940p~b9@8y8+g2?<_WqTd^va0Sv?qFKu++Xp5g2yPVw1!8bkbr z>l7~X>3NyoYHl5?nlV;2V<txAs=`>8TptTMhQq^b%_2DlX!{B)oTUm}@0@@1easj58Z%IMx8{6NR+Sb6*=xzDjx3cC{ZB2O(l~JMecbnC!ilPm&1TtHX z1n!nz2&FiNQH<>!f?k-*n;rKj>x zdcHJuuVhWV*h8;d>nmw`S)0bGx(bW)gS%OCw%^4a72SWlb**bgNk@(hx;%rIb2wAL zS)3DCPILKq3avFX0UOptjQ*H4Ng4@!HJ57RafDV9uFFXEWMHq)Ta~A(>i)*%<8VC& z(WUdaki*3SF5wk{$)i}eK?O!uw9#%=AUij|Cvfne-p9$t2@JK1?Nmt{^>H(4CKi5%FV6EI#C;3{*D3I6e2yqv2H0yNF z_fB%si-xTK$XjAiK_bi*RE6YZM=Lk7` zDE%g*Gvj^HxtuS(pxqpadbM9;H@1DMZw;(^Te|&Ds!{pif;;N7rixrkKLral^+Yy( zx7RjaED3y+-UCvT^`ypGjBE2k;`XLFObPXL$+tnp9wg(;sTxhn@7iWqRUhiOs4kY% zXUWaDD+t^kIAH8|?r0QI&A$F&NG_9-T!*+$eFw4dJ#vfJZ~Tby zpK!Q`ajsWMEwqL38m^I|I9|sa1dexaVvb7U-8|1_vB>>+mIuI3 zAQQOGCxaWf$#sHa9-pO8AtEf}E%MG~$#|O^)@t$=csIf=GA`jgf?g(jl^C(2{K8L| zU0D19xo=5j=rb_Flc2}3v1i(+y2j>Pkq|Azh6Ra9+)hN^=bFU_d}mN>nK#Yd3h6rp SY@4`>yQK4^?_nMHG5aSI_X#Zk literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/memberMission/dto/MemberMissionReqDTO.class b/build/classes/java/main/com/example/umc10th/domain/memberMission/dto/MemberMissionReqDTO.class new file mode 100644 index 0000000000000000000000000000000000000000..ea233a4b3bc6e913a23ecbef71a926e02c6cbdff GIT binary patch literal 372 zcmbtQyH3ME5S;ZR1`|j`MN0=19MmAhOH>Y#AWDBepU6c%AJ}KaZ&4vp@Bw@jVlSeg zpkr5>-I>*DSM&Mx{sG_u;~Wv<49O5F288iaK1)%{=0Qx$rBtGa9RBK@ChNmcYUk$jS1Iw{&?;%Sb$w*>`VyaWN#SP inTZt#(t|h9D+>{F#xMqAY%mU2eadx{8DWbt!sr`NKV9zt literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/memberMission/dto/MemberMissionResDTO$MyMissionDTO$MyMissionDTOBuilder.class b/build/classes/java/main/com/example/umc10th/domain/memberMission/dto/MemberMissionResDTO$MyMissionDTO$MyMissionDTOBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..873ee8f26c13c821fa0fb359ef14cad69bbcbb16 GIT binary patch literal 3607 zcmcgv-BQ~|6#kY!fuq#ap%4hAgqjqS6eay{9nyd)f!2luTr!S&4{1saD}9ilA&1RzF;UMKHpTKYXIJ|F|1W>15kIB zCp5-Y8>9L~!Ms=!Q6qHs6osWZfr@{GC3RYIc^ z$zk-b4Y9P9!wgCmW^LTWtrHxK4KP^y+-r&T9~f>VJ&q|_E~Q;65WDAWIJnI);`3cm zkwJs2$FAC;r%3TYMGU_r!7d{Fc43*UWq8eSZKD-v8mtEUZscxzVj&2m;+kvZZ=vc* ze_QT44@4kB;z+a1&{L63VqCuJ24bzHYp%}eL#?f;w8cYL&yBE0?YM;0sGcjQPL#2! zTym|I%5UjH><-q1+L6tNJfwnGBBX$SOuBNk0vC~lXGzP4)o?L+_{o^g*jO&cf!=Ms zi!(f$IcIxBu6`vCw}&BuKW+(Tb!kW5l&!EKmR(&9S2McLoc@TA)M-q&Q_&UR2)36(}|&rnv+FWIzoZr4$b=L{sG;)^cf~4 zqZ3R@Mn{#Dj7}*j868bhGCF~rlI6%Yo&U)GhxFvoTc#zmFTnn2yY&%WwUa;&AJbJk zsXzGypVB=U0-bH}8M@m*WddvmJA3m_ShK&AY8OsJ4aX`5N@pg{%jepFMjJeZpU=j> z+%bNfV}qYh;TP~lmj8ntfIPvUMC{zS+4F~1G|WD0*C_lRZRW}T~~`I p%B0ekEn%7N{bYQV#sjR=Y>bjSg(WjVD z6Vs@f_ETd|Rvfn~kX*5B%fBnoJHK$yj}-bfq;(8H7uc>ibwmDS){kq_Xw)mqcl<-6 z>eNlkHtMoomhQIYd6r`vRo^kTU1sva>YS$<6_9+Nt<>L3#x zY)G%-TE{+3P{&twT*GyNwB@Zk%4nZ5Mq@J89H%BtJJ9lmjv2fzFhC~-SF5YOKsLPX zTXks^or+o8Fnw9#F0bJY0kf+fz2M%phE=OdH;q~JW*Gf9b-aanft2rrt`Vrr7rQDy zzYz0HoA%)o#m)S-4w%CM$k^ z;jzHa^D%soxR>lB&%|zYf@$SiNY*By77hgZLhlY0EnDt1R7IA|axJI~m3#-LYpH#N z?DG#T`e?VyS->*hmj0nreQ3HYOJBMaqLssZ6p-@^-4)m_?ehXx_ZqfxQ^7v5Jd0MZ z+P34Hs<^37rdV_8W#`D)l(uwPlvR?9QML016h$Ryg$02t@fgQqFPw{wCpseX0=FP5 z6qmS&R#2&J3*RQP>_GcY!>z~%mWt(Mo6dS$sm%)8k)FThc)o@$f&2frx>-oAxiCys zeb0Bz<1n^f3Ppj(|LWlRvlg8{Ys)QM&~;mzSf|aOch`KZcMdUU_zm(K<~PP~g5MOs z>7gXPOydAwY4}>lBd`K*oX5=#<8Fk3h}7kvD7P#ScoC1KWuG`llJiRC?3QU)Ytox5 zI?hq!IR9!o#4r(I>G`p2+2gozlJ%PDd2vLPQcqrG5|@6VkDjHIUa*;|0ZYjQ)-TS| z(fBs%{TjX(xOwiFOAOV(?3up&DzhQ<3YIw>d)RI@j$pnFxXP#z9Y7A{0CM66kOMY= zoTLHdkR;S0_yk!dm$$k5g)l|9lzR!0TWmthEj2NiyVb;SF5B0{ST37rVj`DKHZhgU zYE4YP;Qb!F!~Z0CfqJ~l|Gkh8-oyLckz=5rI$sJjR9Y{ohXZFERHU*CM898Xps* zl+F{5a4N5Gt=zCos8rQ*r??3y!nlR$z(VCY<@wOU5l+@m+K?{*zjj1!;BKV%3Zc?G zm0LW;t^cAQ5AU2gIE8z-PX&~d5`r6L>;T`Ip-Bdz(l?R&9ol6EB_fV|6}BZF?2I^b z=FGU{;m(N1+Y*m;Mx1R+Jkc5PHLSI9*i>i4Ggxm!JlzR#0vilY4?e|%0B)i{xWx1d z%eqz6s)WOW4$C<#=CG7Mo1QHtvCZuUTE%p{R+zYx}qf)6- z)sOuJ{TZ#4Dpex&2lPXKQq|eJvpL%*N)^h7JMTU>`^@aj?9TYlzhC_U;4YqJ(1!Lj zIt+9o#nAVhA9B;;&aSz>^IVh_Luyt!Qq428Pvy3|(S`0bG6pWdV31|kHpRExKCpyY zwad3}sXepe+FUxOE$kiP6{YV>*D))~HH&d%Q~39`)+dWckwiiIDhXJqN~so?4f#f>|Mzv&0 z`UUQ*G{zYoow@5W7{gT^$9Earsb>Eq_~B$I*k??nwxI+lx1GT?TuD z+_A)6$DuSUjiqs69zc`)6qTznpI}@%xsX&7G_MY@;WR4r<=$D+;yeRyMfDZJ~rmp82cU*0T@u z`ELG)_&KVbn)5ZG7XRa0_I&j>xS)31ov#URj-RbaFx=z{cPf_fCkw8-Up>gT1|)_wEZm~oDM9>MOg`-2 z8Y*iq`yxku(WJQ-c~YRa zkdJHb2{gBzLUZWpNROU0?rb2L|Kh3n!>C34deX?B#cY!OgQw;XGa%y6w(yT&E{T8W z)cj#KMf@Wz{G-YIS5D0zW@f}c+QL7NFDb4%z7Oc==oB4)jj^ZGFDSWQpogA|^bFE7 zM9-C%n9wQL8u&1K#}l*n4*eSqbv%qReuB8tzhjbqT2#EkG;orVi3BB`SP0BoYzY6o r09(R+`qi6zK+g&`Xm*v3(-@ZU2*dPc44ddiiRO=KzKyT&HHQBI(2@4( literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/memberMission/dto/MemberMissionResDTO$MyMissionListDTO.class b/build/classes/java/main/com/example/umc10th/domain/memberMission/dto/MemberMissionResDTO$MyMissionListDTO.class new file mode 100644 index 0000000000000000000000000000000000000000..72ad3ef0e10aa0eb4779d512dc07809a297c5721 GIT binary patch literal 3671 zcmcInYf}?f7=8|rY`~>JL?mj(TD1_=)!y4sZy*wzC<3Kbd)p+Z$?9g8?rxmgAJbpZ z4|S%DGjyiY&;3!IK4*7B7Klt{j33UPbKacye$BuC?febkCK@9cz@Ua99Vw&*#-Eta zOv5&vy0Ip!u2&OCFIbKhToV|ao!cBn2E!UgbR2;$@Sy584f%`N+_I(7YF4ja2^vPt zZJL&2G-b0Qy|U%|mg^X`z%|NA$eQ$*HtwG*KaXFOEI%MX;7Bt`EU3%futd67V>2Tl%roC#`r6O=l#}tkWjE2zL zwrol#@OQa|R7$Q>4@u;7oWMx|&GMHmPYIP|cFT2bX*%J{w{@IWFVmJ^GW|fq83C*B zCOTlVTP@43NpA!*7|hbG@9H>*^E6N3t_Pmw)CKCZrM}Bim`m6^VpLG<-_tRRIkIn< zeq+(C(L0-OgndzQo7Zs>muPeObIY{p!^WH7mC*El<%z5Yg}Fxzs&%XGm_f^@uVHTT|jf20z;Ai#!8kW@3mAyZSjxB z)wDNF&rfx4%1`a(_XOht7;;9gsZ4^(Bhv6Y*Xu0eSzu$VE=upWKAm4c5FhV zPHWizxSdG?BkOLsE(`oW5;8pW3aH(s|uvj(<%_Be$J{J=A} zqTKK^U}r5PI%}cbIt#mvF*>!IVIl5z+*L0dWB=nC<(lA{HI~NLBlrdnH9XSs z7~cxabX@91kz_=!jb&lothB`wc#(__%X#KLl^hgQLa&%k&6fVTlIuQgZ6!-x9AJsq zi4iwg6_%u5^{lPH^^z!yw(0vxKuqKDK_W@+dwSe%fa*nuu^*C@Oo{P>L(K90ptwhC zpx?`{>*-GNh7*&%%ZyhIoY~HITyTguGh%DHKP4L6Of8vY<~nYRHL zymK1kIjcskaOZFp?wp&#ol_C_Bg9GJ3I<6F_>H(4_Y3)#5c&CSX!(oV7|mbW#za0h zw2jGpF13y6d@j9>Q!n^(5byJwCKZtW2mG!?6!0NF;*GRo$<#^7q~yI2N;Mdslw3pM zNlBIpPfE5lKIU2J6wxqv`h@3Pngl^oAQ5n81V=$|$V06Brx?a(_?(QCN@qfbK;|#Z zJba0F{vb>wgq}iy5T(EZ_X$pEU+}CjuX0z+wfqjw0t#_p52DgGl241Zo#2#ptqb}E z;P;-;FXDPE_X2lis!V=<2l-dwPepHbjh(>_{)31Nm16xO0Z#9@6%$o9R4S$Ne?mJ< zp;SyU3a3RPjbVvjWtSw8(O!sfIPZ!)(Hrs4O586q(DvqOl%-LQMj0CAXOx{~;!IKgP3Cz9_ppiwSi?Ft@D;w}Z)ce~ a8QjJ9$nlRx20t+Lf8@QwdleFOCVe0v9Qfh`j;#0?~JNFv2h7>Y;1ZQI?ntL6{if1dc`ok<9&i3+Zl%8Lv>6h0 zuP+($4du$#DBRK!J)4+f!?T3l6}}4bm`nr%r5S3CS%ps+%sX%7Tk=YUYSn*+I}9yg z$hM>ozRTJ`k>O@m@!jV0*q4UV0oh<+nL*9H?H`@mNZEbq8(3jz&QC7-gDQiVYs=~M z)PFoVL+;vjrC+y&){;&_;kT8vVnRg+tTKUPvnQ=elgd;8+c4-Ngb$;at^&mjAs%5M zdGHGMLPQKE#jp&dk)@c6zLS&}2*t5TF@`(}luabCgc8cAV3qJrgbl0_DwE_o>2!v}Vc^ zbovIp?+dgu>7azIX~c*&D|Yqqw`#JHADV^bftdCFjTE=kD`dt0!n3EK$+obS2>pWi97qYu=-AS z@t)qbddlI_wH)Degx8k7FO_QvS4(|pwd0fX32C`6?Vj)$a3|AW^k3^0{I-M_8OGl=}=osM_4V@<@O`4#TH5R0!!3f z7=Ek9{0dS!FzBFACz3aCL3Wm6Hji@g+JI}@CCp*IfSYC9!uts}ZfZ}uJ5;j+ZuiB; zGlpC7ctWz)YcX@-iuyS5yjI2nZZk|dd`~o$+vWN@sds7QYwl{F!HI)~$vNg^tXBi7sl>C28S8m_A}*VHQH&3MaJPDkxokA*8d;zO^_Fx*r< zV%Jzpx?;U=dTWc*LZfYHv&}teglGE!4NIpsEb~ggQYme`T zRP~EkX80kwDj`J&T~+p$*q!U)Q5K9s!kFRlabl#{d9lQ5V|hF(;cKiE@Yw8Ys|@qU zK}h#N?FlQ4Fx=`^cvma$km1)jM*V9Rf%_J6X9qx+^^&eyU z8C!D%(d4$hDYc-Yl-FF^>6$k8eL+1wnU$~tS`0T+p=L!;z&gXV!K!qP2*bq8iqU2DK_hon4xKcH{U+&NNnbb(0C(N!QdM<@P?xnf``Pq=q!WYJ${W)@z8{Slb6 z=xvOHT)7v#0|hMNLz3dI(Om-fF%$sR3D5*lSh)Qsy?&=*j?j}(S3;Etij<>xKO(&m zgH}0#KZcL9@GqVjKg?Z(Z-k`(6Zj+x|I(T9!#YIx6Dj;De42%S`ONrXO(XoN6#fi8 z%fg>NGk(aA2!AGp|2e*(k{P0`P_YaTuKtbL?-yQBiC^F%J(uXYOwaU7yqjHgLugu; z$)7qNMEGr@ztNi`tN{Bjyl3FUPhf$DuTTXBnVHKlGlC@o&f#IA_+JKdv-pa>MKax_ Xr-3z+#!0tGH`i}4if_@z2B!Z9`#(bP literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/memberMission/entity/MemberMission.class b/build/classes/java/main/com/example/umc10th/domain/memberMission/entity/MemberMission.class new file mode 100644 index 0000000000000000000000000000000000000000..d703566568e6c0789bde19bd87cc7481cd63eb3e GIT binary patch literal 2651 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 literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/mission/controller/MissionController.class b/build/classes/java/main/com/example/umc10th/domain/mission/controller/MissionController.class new file mode 100644 index 0000000000000000000000000000000000000000..04d640e426b51f51960953b92ed9e71a9b4c07b6 GIT binary patch literal 4017 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 literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/mission/dto/MissionReqDTO.class b/build/classes/java/main/com/example/umc10th/domain/mission/dto/MissionReqDTO.class new file mode 100644 index 0000000000000000000000000000000000000000..5c6235aa1debabe6e77155b6aba67b379b8d84d0 GIT binary patch literal 491 zcmbVIJxc>Y5Ph3ma(am-MlCD_3$<_+#6}S$DhT-i4e2+R!ECtO)!RMsZ&?Wz{s4cJ zICrMeGQ05R&6|NYGhg2yp8&3~9if71h@goY>H_V#dQmb_=1~qObBet{{X!e4dV8nk1}rdNx+cSY^7%7h>RN+6kQXmN7dQh#qX7#dNDnhd-kn6-x><2IPF7ia}h6 zj=;?_R(suyl&6J3xoGpw7|Obda*lX~_Wus-BIL6dPw?l%Gp=$b%N(d3zC*mRP(j34 ilz}Q5jLnkQIIfl2I%5Sbv^fS`+rTEXsAM6wu=4}+etb9p literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/mission/dto/MissionResDTO$CreateMissionResultDTO$CreateMissionResultDTOBuilder.class b/build/classes/java/main/com/example/umc10th/domain/mission/dto/MissionResDTO$CreateMissionResultDTO$CreateMissionResultDTOBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..4f4b8d901eced7620d840dec3e793569ba795e5a GIT binary patch literal 2885 zcmcguTW=dh6#gc+bzGOEY3kZ7Ed|nIrzP7Pm*S?7IHU=6o2rR|pig7(&`iC%W9^P3 z`ha-jH}Eq+Dk>@xKY$;FIO84Sb-bwpit?~?IeX?im+$PE{p;`7e*#!SBaab`Iv6Wp z91{%F&-pHQeI7n@H=55yOEXN|m7&!47)C4A?MdV?=^$Ug2^1J)O9ig@o(COYxZR+2 zPzvfHA? zr4~eVVLhaVRQGut3;MW<**Rmlkp03Y)4>|U<)LI`#pvKGhKp}jrF%X}2;C4l`X>O! zXrxOX3?I;Lg60a%Bj%1BlF@}aB%{l8pUk22^p`;xRa&|9mKn+XE3jXC(DO7JLqHx^ zX*9;ok!$#n=Cm7hePaQmJ)jx^8i$?vtH06k3oS>mAF7zBSSV7qvAM>8L7U!(KZWaA z_$LpIpXABno6VsAr?c@-9U4E$xy3h|LHr_aWcfdPX#9jfi(eeVzlmFvQbXjj<*f7v zO5e=CBnn>QBt56-nSF(G*@PtAmNL1$jgKsLoyySEKzTpz@3`<9?*nfFFK2*{Da2VbI0Z%SCjB<^D!4^aLGl+@rS literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/mission/dto/MissionResDTO$CreateMissionResultDTO.class b/build/classes/java/main/com/example/umc10th/domain/mission/dto/MissionResDTO$CreateMissionResultDTO.class new file mode 100644 index 0000000000000000000000000000000000000000..dddb1288060bed81e1b49c824aba7e4812e6e1c3 GIT binary patch literal 2691 zcmb_edv6;>5dUp#=N#ukVmA%7OCLZ2w$t_+D9;NmdCO$ckg3)Vr;x{#hJuc1=nT(0!ZY|Ume+H+(f2wl4`tV| zg=aaw;W=UG2;Z=!Ft+3MJ`XoryNeqEwUzp1BTRLVj z$B>hbbU8yQC3GMIClM>@xTeIWZ60<4rzZ)9QopWa0dJF?P6WVSlMLnf3h8*?Mw}224{>8Uf}n7-*Igo6mSEX5+&sw9k+0sAumPj6N6Q4juD4hdoygx@Le76 z;yp6lwZiU(uqnWMV>aASb{2Ik;R7lx{&U}QLx%Qvt)#r$ZNKClY1V#>T=`E$rR0+0 zxrj5OI%aueXq@fmer2yQdQES6*y|2Ftf7jkh9xkO(i{)Z7#dQ-m?PB zMDbLWg``^L-&L^#BQ1sp$%@Esl(5+~)zk zGn-WA3F0s@Ng|?V(_pw>O`WBZ$;A1`pBxeM+-*_gAXEe9h&(bB4n#lb@TX3cxnWnL zmh?aYqX)6WL%AhFso^VzNB`$3Qne5I>D;;yGL(VUi!&GIvBt1;*89w;xtXcnWuEn` zSxPQ_GxQbdo1dM;vjVoz(D1E}=V&tA83r?mlVQZsNvu)(YYzZ0yh;by@sGt3H)6pp z%eP$~E;fZY>i5i49^QN`iDK*59^Xt_t_ad98?F_GX-0C#PpNB1SU=aP&T_0bd@7&l zN={X^aM3uqHTodww;H~qs1JiR!u-H_4F?RjFBhc*$C1JcO_~X6b6J$skfc>fO|6L1 zSc)i(A)-^DQHBpmx=K5jXpU&5{u->ld;+b0?*udT`zI*Y%h?mmzoOF#)aZATG(or5 z>Gx5rg=O5M9qC6_)p;edtFTnmKtv{5Dcf1xr*$z)q97sAF=#d_NDp8nfbJ4ifB8Rg zL%{7!3@GGD+$;wUI9M2j@FKBBd9Wre5$pw&-t6Htn2+=U3Y9*ZQni!^&a9-)2* z`0YySOB9GWkgG%$@_c>y6z^Z8zYxoug)NUy@F@XMfypu2C}*efS%S$Rs$9y||A2Ox zL%HNeMsXd)Bdt7hHRWp~m5WzXUcl!gV9#GgIfpOE%L#l5Goq__OteB36W4NF$#EUW sRs4j`OJwdTl|mk0V;vjV#5dTE^fJU-#SY5!?@b=NRA779M+@bD0YM{;bpQYW literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/mission/dto/MissionResDTO$HomeMissionDTO$HomeMissionDTOBuilder.class b/build/classes/java/main/com/example/umc10th/domain/mission/dto/MissionResDTO$HomeMissionDTO$HomeMissionDTOBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..dd8186ed465a18e9b5538f01f957eddfef468448 GIT binary patch literal 2543 zcmcIm>uwWA6#mA!Y+@D?Ot2FIG(c$W09gW*QcNhs5yX-Sh(xIW6*t|uAV8hjW|Wv4*-JLlp&eqbntd{5L=)Z+Sgsds6WXddZ=;g6%z zH)s^Y{PRwvWhm;=zD#5@5D%kBX>Ni?stb)kg-x~RJr7bETEgtOfSQ^?gNA<2Gq?e5&$U|Vzr3L zL6tSZR>Ai*VytPd8N=i9k?5f?PH2@{&M-ru2lv(b!;s%nowy|)$!@-F14vuKvJoeY zO_Asgm1qYy7;b$_)~Q#lDWww~^L85OWCA}k#J&1@ThMYZX=|fwdqUk`WmgyeZ!(6k zJKZ*tp)=iMl~tz3@k<_e@T-Hn=Au%N77xNAqkXj}yfixL-F?Jc)XCm5yvx>u6-=Gk z;E^AQWU-;tUZ-6h40DFlb8!1@TMQ9@nUPN$el?pr3sK`iuqCx158Qf0x49PZBoS1( zCwe2taJrXaL+RiF!{q_zhxz1Sjp6*)Md?vW1Aq(E!*kRLM`@-P2@DHFjnnr6eRJl4 z7~s)MFu#?D5NHlYc^-IpHX_T^np_F0mo^a zq%rdmbHfvo=5}^yZm;5+#eP6#$Vf-AANLc^0$)Qe4nZEnGGXPY^s>HO@A6h~lfDzA f?KX{DxJT3(s(=z!u!=d_Dd9dQ@f-c()iC!3<$YwY literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/mission/dto/MissionResDTO$HomeMissionDTO.class b/build/classes/java/main/com/example/umc10th/domain/mission/dto/MissionResDTO$HomeMissionDTO.class new file mode 100644 index 0000000000000000000000000000000000000000..4f66ea62c664eb56e9b054471f2ecd934b86d066 GIT binary patch literal 2566 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 literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/mission/dto/MissionResDTO$MissionInfoDTO.class b/build/classes/java/main/com/example/umc10th/domain/mission/dto/MissionResDTO$MissionInfoDTO.class new file mode 100644 index 0000000000000000000000000000000000000000..f5fd49b78d08d78d09dc30e5660112f642b8d276 GIT binary patch literal 2387 zcmb_dTT|Oc6#f=tWQ+*5F=;N%ttF{#k|?BUX=0j|OA_1~$Pk8^q{)M9ZDR#V>q={; z{ZD;JX2N8K&g2L5M|FBuT0jnzVLE=0&hFWB`Oam}{{7G1M*s_0&tnJ~1H&e=7-1;9 zv3G3CvxC>x25*bdVHlZr16Mv|$W*FZqsU>@K;Fa{OopYl@Gbtk?RPzH_5Aki9oexQ z;oELt`EC@sBCs4Otkq<_!K3BP^=Z9p1iuQ}GK^}`26-zq4-qs)@Vc%%o-r|j0z+21 z(&G%Jl+ZI7x>~GcVp55XIXr5IZda0f15*so2LSUE)QdgWb9k6X8JQBL@|=nDxWJH; zB0)r6E6oA;tyhl*s~moA;u0>C!;T$wmV`rTSs9SShO&Rv#5H_D<>$ZkY%gMXF&OKq zXx3YAcw5%1FBs-3DSlk{)LxhPD5tu`Fr36b(R2g8*7I9D+_YOslZdwMZP}r#_L?~? zJ1)iYXdsoLZe8WFBb=vpX!~69kW3q`q%#;^RjPwyyh|s|4R*vf zw-Uh>J8(Q6O*e(u?se-&^Pb{p#mzsud|A&f5vEm^JUfcg3|+fljv7gO?;9Qmbu$|Q zwM1-^Q>UEybRJLjGxVr4@H4~p!{nS0tbtXA%O{Ic36soVmL~iVO`Hr$>Q$jtNsarM z(mW@c1I>PXNmA3adr5SdXu0+QtTwX?qjqx_}QRJk;2d-x1cifN>iG13H;p^+A8#9POxUj+U?(-Z(}-#`$XyS)-9JbT+(h2=%he_{YXuhLml7aA%4IU;$9&69Oke> RbuH7XLA~)4npng6e*qJ&J@Ehl literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/mission/dto/MissionResDTO.class b/build/classes/java/main/com/example/umc10th/domain/mission/dto/MissionResDTO.class new file mode 100644 index 0000000000000000000000000000000000000000..0f95436cc6f4e13d7778f07fc6888001e01ca2ea GIT binary patch literal 1363 zcmb_cT~E|N6g_u8C@d=mul<~IIbsP4nZkyaQ_s*Sr&P;FT*Y6)c0qkO@h7!sSDs@ybMOe6&U!?G4@JXEX zuaz4Srrzj4M{fz`t?hFM(}b6<@rC*-{m-5fvG2Zk9$krn@ud!gudUT45QE5wqnq)m zvhU7L2$ilGD8hVC2kJQX`zkz>eUBrJo^hpjE<>I8S+EjaX-jz3D?;{~Q2S`&&{g|7 zWync+mTZzRd#r49q!J<4L4$BmgsSu2_$n*k(>CI*I=D-a6Dl^Q{$8xTfeIZg6T1IP zlj^-kxR^kpQLS8esPleNo!Pk_2A3w)`JkxIe4$R>9qN2Y_)zE=x}lQM-!9;OkG-2d zctp?>EZ7;(lj$ea4}(C3T~Au8_}^*VZcW16NRZEz1Np-sERSa)v__U@tv;k~j?Df0 z^n_-<`Y^veo+O*cIvl>3l85-^tBLIldm{CL>dtr2Hx86gW1CC^)0kyjPsdfpJM5J) z$F_udEHE}WXAw(iVg)U%qK!4C0`}6lgAI;0nR=74#n@rnW_--J#4De$h!xIw%DBq0 LEygv@*v8Bsoj;n@ literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/mission/entity/Mission$MissionBuilder.class b/build/classes/java/main/com/example/umc10th/domain/mission/entity/Mission$MissionBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..2234fe54d959269199fd55b8c6ede1300d1a4837 GIT binary patch literal 2845 zcmb`J?Q+{h6o%h*;*Yp$<2r5Aq^6{h7CS9f1C%c}rHMsO ztuy2ox4~t=Oqnueh6~`L7|u!xkt5XvCO@RruFpQ_J$ugX`p>^!{Q+PZTV>=hR>Zi4 zJPHhz=lp=%4)>nfPdm>=S2GkINKfjA3}f}i?gUDhD57lP94v-MUFF*12k!PAVGrEy z;yt}*_ms<}XS*^8r1EUxX{itG&8Rycw<`nb^n}lllRa|VKK9#I-m|9hbHTzSDh&BR zD_=0!?GfHWnHoW-QF& z8pA}_7hH?pGOfo6^m~R|Nv%<}G#hDeRVuW)g$5QF zrd_@-TFUEk{k7D4^c86C>43pW!lJ;BOX6Q53Cs1hHW`u_u6;G2vUJ6|cOV1Vam2Fc zDa}pZNldlvD7T~b?I*$$zDazOVZ5b!R6&z%>4~j@+Y$Z_r-{beRKYIyrRm3m<9bgL zX=POUvdiJb4k6DwskLdG1-7y&^q%T{$$jn$Eqsz2)JK6c_Sl&S*-ge5=kZLy-^Jjp zQXduQX%mz0m{W}5e*J&QrNoxBI@(s32$3pyhVr%=_+7CoO`%!w*?HF(((Ek}=rtA4 znN(R(N(b8K{V1nF36B^yj_l($K6C4`x5Vzuh1oP8;n8S55{IAZ{&VInvBqQpD`m9s zxQNfqUS4IGKb9-K1GO*gD3)k@uktP(!iNk$C6gN)Mk3d^*K}a3ZSR)DgFsO6Ul?AdA~qOqrh?4UUPPPW`e;+S zNTWb;gD#dF9g2B+(=7^y+te#idxzSbx%5(FbcvgwX>>p0J&c8*CIL+l#f96y((7mX%;6;JN@NnF z$T*JoedEB;Dku1p_#lga{?z$6g`PBRbCI6Q^jv+3>)A<< z>Zg`jKcC>!n7=_4X83c&3faHmMiNimS9k{)6!{ XKEo60RmrwQf56r-fpvU=P0aiay9%j8 literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/mission/entity/Mission.class b/build/classes/java/main/com/example/umc10th/domain/mission/entity/Mission.class new file mode 100644 index 0000000000000000000000000000000000000000..b57aa767f810f04951031bd4f8f35508fe6d5e43 GIT binary patch literal 2579 zcmb7GYfl?j5IqYvez1T;NPsvEPD5L89vhlAeUQ=+8xp7H(coH5zC??C1DmXOt=)B6 zq)PoutyC*jEAmLB?sAn;P(G(Iok{Hu4 z`_g=E8iCakM%8VYcG(O>jVleKj{B2_{L*rDfXZqHX=GB!>KKQvVWr`=4DqwsYTLr- zv>Ge7gF~a~woJ=0T9)ryu44!%u!19FD_m;GG(16%&GkUT{6I%3Olr9Qzu^}nHxD|N z-4tFH6UgZ}hiMIC_bkT>)_BXM<+{AbjE)PqsA0rvYRH9=*rs#9tT+eirgJ*xaY;kc z4_uG=F{)<-q;%fhc2628jLSMcz!hRJ3pO#PPdM5OJS%cl&~a6&jW>ng@T_*g)MarE zxfB)|ovMclZfF0cXvow(=`gV^QMY_+-xlkR;|8X*@-@uS$1BqdOrtG4-|_?DG=x!U zu4-6}J$fh{;mM-ZO}itgmi7a=J~$d;L4UQQwz8;{H@0h)+EWdeV||odyVG)rop4M^ zwroU@=Q8~Zu_jxlb5wJ89EqQNA%e!?Ak9sA7)6q(u0LZGg;>bPuH_s@!dtRTDuA@p zv2Bxy9A(dd8E>d?%i@J(4X??#Ya2h-7m8~P05#yjcjBm(9m z##NlxF`S#O+HPy#ePtYTNfzxu1QnKd`rSzB^%ptDL)9moBWFh#(^{cT;bd+Y-T{+uSuhwnRW4 zkx_eY$7_g9OA<$q#@Q_y=b*;gPy<#LD3}^*A&my^CDkqHGA< z#tJ?Sb?$JNLow1B=T{nk_6(o%fMc-l;I5A^c)%B@?||;UM24GRVVVkGGoZWtYW${) ze?sdb^*iMetnydBf?)6|27Zr{1fw3l!J66!#<=q>O#Q}l zP2ovxFsKLom2yd)l(7+68r+i_$>JY4FU`U*LbI6@Ata*^P6KV?VGPi0KhWGzphu|0 z0Ok9E@&k^d0jRX7^-{QvE>^*BPjsyWtEi156Junl!HDt literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/mission/repository/MissionRepository.class b/build/classes/java/main/com/example/umc10th/domain/mission/repository/MissionRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..fa584a0ffe1a4c13ca3d1746fda418b5f864a73d GIT binary patch literal 1160 zcmcIk&2G~`5S}$HX$+LKK%h5^Q+vtM0~gX3l><_dD@rRNaY5SH8)w7*nB8?tUZPjt zg#!=3Lm|eln>vA@2#LdJHM8saX19uh<3e|A zgpP*XC!TvNY!OyTd!pCmwlb1dqxufGWiB}rId0L!ZTCY zgufON2iW~h%Dqxts9OTJ&{pv$K~UQ*Sc4U4qt^}~#N!UyU9p+j`$;z3-#?do#1Uv&p(F6!{~WH*eni?(g@$@9ljL zpS}mcMlq)zRj5`FQc;6ifi*)`BB~$L5-C%UW)edymOG=-xRub1WHe#ewqYfsww@j{ zhV*Ek_ulWl3PfzjO6z;{lw}(njSH-gl_BS@j;8a=qy5F(yThnMy@Ifc2B-pC%FxP* z7I&)r7AgX=31rm(0C3uX2b`>4y6u7Da8OzZV2-(`0F0kZ($Cw-7`OsJ@ zu%ZH{#fFjLahZxJmJ7^vtfIWyquUwNakJ~jidb!*{hiuI<>mJ zqc@E8*r4Dl6;~6o(PgDaqIN26Bu9qRT0%c+r4L8rnxo}_dbc)07(SBGZAYNW8m7D3 zdwV-#XR*&UVvmZ=*dov(am?4k-ZUPwhBS#*0)xSbbMdnx9@?O()900lLpio#yMkU7 zJ8+FaTP2$WYHf$OpAeXz14kD^y;;JY{Mg;Z6R=OkPVi8u(NZasC)UM9>xVPRA*pF} zt3RMPkHa1X{VE3Vc!7%w@LWWjeoJU6fz`f&T<+7U1y6vY{Vtz*32k1*N`a{M<8*;q&xdbLEu<0Rehj2SKOWM#WIeS3GArINcCon z=+1!UXr@FcTe|$HiepkzRtx^LTz_1}lkpS+cW(U_Q%~^Buw6Xd5ysQ-bOq0lCb=PJ zw0sRGFuQ$6&@wJCNoLPf@hm)>Vz|r-G;^-clel1pd9I4*;raBcVQ)3kGRKMc2f}zE zUZmi~QoolJoe-NW%hWZ7K}-9Apo;#y>-?8VnkS}sJh$M&#Pl}2Ld7ekVzq`H(`-jt z|0X$gLXKXe;29Nb8KG;cReCy*G?o z@fHPdmH7EKfu2VSJ1%x!cOLYS^-Unp_*y{9F1$mW5pQ?k(iOxcV-fUdU`;Xsx*}>dCk3A z+K})5WXKsccp#PSNpn^zePu$HN;+4kZ#(NEtF%!F3T~tdM9Wbukr3d21pNW}x?Z7g7TIg8BJKkjbZ*Yu%_)pyF}~GhE0yfYekZIgNc_ z*LknKr1GZUl1W$&rC40C2r9v|Q1i+Hj5h`)Ek3oCBm-aVLf^p(q&O$WQ@Ol2SP{{6 z=MZ2UD9Jugt-K@^(J8_b_v#?vFv4!PqsLeQ=+hq*EARMl4FWN8I%21COxEYH6(z} z_7lm!E51xtWxNzE87VfALbn_SRMcNiE$euM#CIjl@oF~hf&s~b)?v%6r96zW8_^l5 z#b3g_z5A<*U*n-hJj98Agz-=OOToWYJdFPcEGpE4MsmzLtVd(6`A9_@Cd#d`}YannRK8tGH&$km?QNw4n^Dc<4ER;#is6rOA z??r20*U|~h-^nivmrY`E73wEmim&|F^i?7hnc|T4*NQd051|?>2m% z-&T2~@dbR5Z)Ac8@FlWu#(aDkUm=Bgn1iq4YZRt~!hM~i5Wc~cjJ5~(_$L2qx#2-R z1-^xEbBmPvT0SLOv`E>yCb7a7xvP&7uPg{R(_Ph$Fv-tCmn+mI-p;&GE$pnmL+Z0A ztQ4gxC&2A4)9>PY9#b)ovPn}pF4Lu1Jhm}BfpwGERE?c9&{l!dh=DD|?kfHx8nWR-FSUx*C{OQTzU%PPEL6dBpnRQ4mc;0mn`B2ulydN?Q6M1Mh7`vibhT} z;+K4t1bziHhUMA7vE(|+rE=Sn3B0*8i??U-EQT#e5w#J z3!recy{yGhII_;^;pb#X+G7X>_!W?@;98T!f)MZjd1ikzCXw{zdwLK z;E(=>ztaeR!k_UsDHZ)whdLodHCjbT)QUPj>-lV81ACB9l~0YM8K}pte4okplN?1* MFB(OYXh!RQ0XTqXvH$=8 literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/review/controller/ReviewController.class b/build/classes/java/main/com/example/umc10th/domain/review/controller/ReviewController.class new file mode 100644 index 0000000000000000000000000000000000000000..7b06a72df83fa0e5daf50463a8c78d49da7a646a GIT binary patch literal 2451 zcmc&$%W@M(6g@3J#u5S>^EBiE1QI`h!92o4#>6%Sp%B<*Q{J#@jT*UOG%aR&WW44F z_>?4-0F^~{+2o^AIU`NUmOVBWS+E#&-`4HZ=ia`L{^#F6{{k?F`8;yybI@PJ00sr_ zdZzBGH?rRFl^fT+=__{4t@)-ReOEU0lHBl(th%15D)*rZR4DzG*z;5rEpSO7xA<7# zUip8al=2ut-a(;=11RposcPy{2X3gETCI~$U_;~kDs-1yD+`?kfrD+O6%{tMM~=5M z>2(7}ZRHd#-C8Q(5QZI$6mb}%0yneF+y{<8(F>Kds?Am4-S|EzRjojwwMX_%ar~;1Sn1ka*oWMze=`2HcM#Wr16QW^)h+fW{AdL)xx7qgX zL}V#b^Y@o>@l22A z?U5?8^xN2S99Ugft2)xWmboA>R$9$O5V%n`Va<&ip$=*<5;v@y@Rhr+DsDvwRabU& z-6a#*C$iC?A~DZ(V|HBlnc%D$$<5B2>IT7Q_T%{M8knTU>6F`}pqXLuXxTUQig}eb z2&<|*v9My|&{Gd|62-^17wOAMHVWL@x35@d>}HK8elJ^Fp4jyCKvViLSq-J#gqK!) z6tK4~_%e!A%$!VZ4wnOB0wd)&&a z(>-vO{reQ37c5sv2j?uu`C)v^H^v!CkI}~!VE8wP$=~5jy~n|iIPyzN@hpE2Q2}f{ zLl`5#37n&JyuAhA;XEa7#sz#&*dI6_5EOuMemP8FlH(x%n&NnopCc$-;zY3aUnce$ z&S$BbkSI)kz}V!}A8>x9lq31}W{~*ixrNTTg_cR3a}QtyZo1_P$39HAV6L`Uj1uq~ e6fv~5B>oEfd9tjzB2(PH4MojtFYFbxi{yYyU%0abLa1W|NINU8teqlpie`;jsXk` zoZB<^O`~es6=S=&Crh5d;BCvcyt@K@sl}ZHhA^xlq2mSU0!GQH8S+Q7_NXe2My<4R z!`n5=PR+Dz!49|o@?2aAcfOv zzpDcI)c=1!eOxCot78uH%&%*D+*4qp1<5AyRiqn0c}c0hEKrC-IZ!w~mQkd1EMkc{ z4rm~7t9ud<=rUf_a9wfG5V+r6n(EJ{DJScVsuv{7>Ih9V>Bn1ZDTTv5j;K3?6&*Km zi?OIkZ?h~g){>U26O_j)Uf1x3jyLg^fb5m4vET%T!m~?(dJ?UK08=Mr(5n!ob=+1| zOfW>5kVpxv;;v%MI|4sN!8IB6JmIbBSXay%CcIogE`@GGk?1{vpQGryAyKcQ_r8w% z*c8xJ^n!z_yvBp*%0ZoZR!tgNr({+)cxV+kBDYrYp^hxJ=vC=x&96;g+AMi~0bj+o zIzAo>WP3=|w1%8O`ebVHB;S{=C*9_e&w>oc0{t1M%#L+7YuWNaLv_)DS*&tqEC}z8 z=~`;sob2~@tvdU4T$c?Q$os`Hd#1@!&j}liz(29AvS}+?R_&TqIu1|Ut{=Cc7yX$| zYOZ|Tkad>rM%-?lx+t&`XQr)}yynHNY2zsGkz3N+b;=J-*Q`mF4AXtdbE3C{!-N#3(mxsT_9YwjU4uB!_V51>uk zmTsnM*6Wgy7zwqSy->rhz|E8C7j;LKFXUMd=kukiqEK}7T47W31#vr zv}-;_mVI1U@^Q&Wl48ckf{#~zqe5tO8XDivqaS1ZG`T>-<9trwGA?3@^J=r1&>%j? z7aY+v=f4a9B&qooEq%?|kv=LYQ{be+`3=5pVv>{!`}|W}BZwP5UZZ&1#~q4yePk%^ z`S`%cgJ+Q?iENq|wX4K8LsYYTo8x~n5{7x0DAK$_F(5cl&Xs~^8Ip32Mn>u0cSJRb R3M?90#vZDat9+|r_&>NpKq_eY z|A_}WLx!0=@B{c!3}+=dQK*{4}1 z>$yEI*m0l8whB7}lPiAU>pKDywffc+ikPx6ZQ~4Vfz`I^yYgqRKj=w!*l#c2)Lplu z`ko)Sq1^T5Pi{vmnljrb^5y#Gqs6sQdRitTo&}11+2597lU(K2A%9B+I}OA4mW`4j zvm&iR+3XnEtc?oJQr1?1mVp+iWS~!V=%?UwHs)2`lHJjP!twb@GJA1D^237X-<_@3u`vk@eNHJHgq@) zwBMI*5{{HdU}}3rE$}KEQ9syKFQl6&Zg@ebC!@udQZI&sMy7gRucs8a`O84A%cvdt z0}hTXWUc2#QC5)J_%UO44EvE*K1izF3<4R(CM7GT^so75ft7OkFbZSrj=Zw)oxu6y zRhhFS1X$)6%(2t+oP-?4+*Qn+j91Rac;)EhT7=+qU!?YBo_bshT&vC>5YEybEa%!D zW}NGLC_4-JJI;eIwx zRZz)15uC>qQFV#N&4ZS?8Z(x&k9UCIxP6`7PE=C%S3TE}uzPt-0zs%V>d(^& z6(coCSm}m&q>`~JbmjkwwwdZu;51ym)tP{IpU;bkZgf?@^LLKJYCnNipGtE_)fAlOXmETf{AsInv;KKPe_9k_h$>IwdQZ^l*jWbFga!5hRY3l==a iDhxExV)Se7uwARQbw&#T+H7r(b+EzAtC@>UY<~leJ9s|; literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/review/dto/ReviewResDTO$CreateReviewResultDTO$CreateReviewResultDTOBuilder.class b/build/classes/java/main/com/example/umc10th/domain/review/dto/ReviewResDTO$CreateReviewResultDTO$CreateReviewResultDTOBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..567b22ed6048a277fafbf72d02ea0351b705a583 GIT binary patch literal 2994 zcmcgu>uwWA6#gc+b&P3lgv3B8w1L_IvOw=Op-r5I7);V8Q7Xi*v3E$8?CwOnW4BTJ zt54C#pb`}omHGgEsH$gn$H_WgP>`bh*tr~^`ObGPbH@Mv_xc|I3s}vg5B(Mf3K+x? z!{~F~=C;R!ZF{ZpTr?HK&^<-@J2M z?bwd=xf|G_XuIMk+fmY9kC*ErTH0KjsfL0paUg1W>W$LHmg_kpWXL68HHR414=L7V zuwBuV-YZ}PqYPG421*3PdOW4Jp+eUvju$Y2bL3RW70DPTQhGHyyDh>P@q7VOm}VGm z#&n$p!Yn4b%Jqd^mrd?1kt3V5t5~?euyRtt$fJl$Iw9{f{7^~}jQvgRjbkZE$AvdC zEpO%V0j^lMTEK_+s4L?M97VCsy_Q&e#&A7tJt>GvIc3fe7^hmgR={<9%rNEiT~U=m zldB(HwL_~&@jyikPt#!U>PlRa##{yihKuX1Kxd{FwB5*Ucw!+4q@pYn0bLHB^c!;5 zejoxtxff1_VW27~8VU)q5ixP&+OmZP!mK&Dl4>)I8DK z?}=CW)NGGF7HUU2-}8|BLWz(Z|0PZ5AQPt*j9=5%J5_#q@%YV{&$#=iM`Ey{`yoTU zbaFPS&T>k2ZvHt!K5VZh$qe}o*$SIt+0~b0?4Wg1-=5Rj1hFb2wIU;B;U2@?cP|R+ zLyJ>4x256*z6ksUPZiwbG&3*b+?~&01-Xo*8`iRV;^YoX7FlK3G z)2~cRW?zB*5kudgQ5yn=ag#=ETpziGIhxZn7*Vs)9|KhgP!qOhZ~RHa3tIN!DAf5x z#Xym=@$I%YpwUK;;E&)=7XH~|<0o-4_N@b{P zpm-GbFI;|&8Q^W;#SHL4d>PaEsw*8|$Fd6MY0i_W!hb!AQn-<0~&Mmtx##! J@Cc7l{2w$l1Zn^P literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/review/dto/ReviewResDTO$CreateReviewResultDTO.class b/build/classes/java/main/com/example/umc10th/domain/review/dto/ReviewResDTO$CreateReviewResultDTO.class new file mode 100644 index 0000000000000000000000000000000000000000..bdd8df7a7b774d28cebc10a295b35afdf3fda894 GIT binary patch literal 2702 zcmb_eZBH9V5PlYH&UTK1O-O2z=A|VmHc2j|>8oj4UYg+4KmwGit<>slui(P@mfoFd z`=9!uk%}TwsXw4Us_L_MXE+oGQOQW>*`1x)dFEwj_~+lFzX2@Z+X99#Y#?JIixGkG z7xsZ|xwf}sZOE4L+X5r=j^~7r1cqlS+j-=WH&8Hf0j9u8OLZ*ytKHdmrPb}U=I)2P zR$Fy!$FqES;K*OBcBpujUT(->d24-o$(MF0k6B$eBv&98%hzdfym5k}p}d`%w)&Qd zF^mfsE#-yM3k6CkvCYtT62X#*30x#@-ww$Wm`KUhskZiFYtUO#gFPLwNLy{aeAc^v-(s-Wm_N<$7ihJcyg`VX-a>~Zn}(EDXN}r+jsOn zVP?Wzhps*yTnhPER%N)W+Rtp??#NL3yx(ZXbtK@-R0d}2%#y7MT-oS)I!bl#zzG~W zz2JE&NM4!^+bA-FH^Rua*^;(o_dmksL|8~Ce!IkrBSHUPd_;#^VDro zg7qzF6TO@gZI9n4u>yrn)%9EQv7=L2JnmI&RQEJqzKt~*gexit4SXT+;Qv2KR(`L+ zjxQ<|2BB~7$Egf*SQ5C|>xZ?Z;nm`PRy*!iW6U(aQGP{!lVc;O7w{Bc8)%qV#hSqN zlj!4s8!-Tm6@NlS4O#jW4=<+2P~ zzOx@HKdrLl+Ch+JB#Hmw^-I#$PqnM#q?>h*^%PwxS!R=Om@ZfQ@{@jRU{m1MNvO_n z-M}{j*UlDYYU4Ozj&o~>%`StIo|jye^bm_EXH-Nvf=Kfa9KbV_u5jm)W=W^2uOOtcqYpb&Tr&P5H$!uzR<)KEl8pfOQXC5;LmWq&*&*9w%*b)fBq zKz?t3rxvx6#m4`*jb8!B$UzwNJy|rnoXMC9g+emfz&|2E}gc&gssAcy?AzIxBTjB z^f8*5bka#@`T%{XOpjLUux7U&XZ%Ae>G|1Jih)Aye~QN#QU|#yqY_ z-->+xz`!g%B%ggQNyac0)7zr8N5T&guNs)cJVUnT3ob={l`vY znw2uRMvixhJ}uKZEMQS>>J5e$g_s{(CafuIou66gjDwXM4_} zcVa#ft{|F;dWm6Z-K!I~$IF&0cADzAR5>kF+KNaA+_%&`5)R2@i;y05+tM^fb)H=^ zyO+pSv2V=$wvfkO{TcVUBc$-jQNPd)HI=RX`_brXG==f~o2KSr=A*H!=E!-uLqFx)S^GZxWuRC+pl3>OI?aeNta6|d>n#D=BL$OT=J?kGK4 zydwg+=>>El=hr+>2GZvZ&BF^x?6l_|;cE3g-#3-{?e5(*7`LSyBmTJkAAqdx8~5fh(dFa#zT6MEJ7_{5hZ}}e`Dc?<(EXEml&fqLG2Q?8ERKv;d(l;G)L!CIr=sIh0r$kB3>^MR*3%> zZqjfR}f$olmTl06P(3;2e572+nf4eZctlH3}l8(|k&Ji|V! GnE4M$&MEHz literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/review/entity/Review.class b/build/classes/java/main/com/example/umc10th/domain/review/entity/Review.class new file mode 100644 index 0000000000000000000000000000000000000000..16f95c6f8b599050bbf797eb2c526c7d3b6d050e GIT binary patch literal 2900 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 literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/store/entity/Location$LocationBuilder.class b/build/classes/java/main/com/example/umc10th/domain/store/entity/Location$LocationBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..7a24231c11c68781c5d03c8f5d43133fb205ad5c GIT binary patch literal 2507 zcmb_e>rNX-7(HW**SMx829u^~b7^z2$z@5C^kyIdw*(^Rq8d>}`8BpDFkyEG?ard| z0DXr(Mk}RCl}depK2+6jcGs}J2pNeV-nr~I=bSm;>^J`RzYqTaSjE!j z-nF~R<?UoP-#5 zI#p)$qhrH zr9!_W)}=X#)4dGbHIcOZxd`-zimK6?QaaE+-;c8%@Kt0S4`0} z?NM1kQY2 zb~#GCg$;&FCx_B~7Vi{S>59ovF`b|%U1lIJX_TY(I<*;d_YBR^O+#;PMDK6*#ph^_ zZcut#rJhYInVDI55B5hCUZbZ02azq%(-4{^w{V-oQMQE;-KyA(ZX&}IhkOC)dv{`A=Ru{R068T9L)#Uiqi{%2|Z=OX-xG4vas z8Sat(*d~ka_?tA7FwPQVoP@6inD65OF&gJq$Xny^+~26YT6jn1y~8y9&b`O^(Kg0Z zb0ahI5ML*_kH|TLTS;U7g-<`=3UCr|Wd!gfz9Fa#zU|w_chOu0-&30>vSs?!(V$V8 SV)OK`sd1$M literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/store/entity/Location.class b/build/classes/java/main/com/example/umc10th/domain/store/entity/Location.class new file mode 100644 index 0000000000000000000000000000000000000000..9ecc986aa369c36e745120ac37ce1e2cdad65e01 GIT binary patch literal 2118 zcmbVNZEqS!5PlZU#$X7$G(fo4lNpHhsf&Vw1E&!cG+G%C z`PhHdO0^<2Qhz{yRMlsf1KX4;agn&)*`0Z2=9#&Yv)^~Uj*M~;u=1F}tibG!8@Os$ zAicTO%wi7N403tQBQLOhQAYwPwd1+uSG=flO=IQUZ@Qx8B?D zs2?XAlWweP*kMk^x*N#DzTc8j!(pKW){@HAg4a`Ow@~*&zZJf+$2B3=OjoKJ$y#7& zr;TDdQa2#^^qNlOYW&2BrH);8!o3S;LT?#*J2bt$bk1MW-2!gwproi%fPS~OeFQo&ij>FDRPQ(Ni-wuHn7x!`TRCG|e zqp%;f^F?v zJe5A@|9XrYm_-(w*rH0AD%ZH`-`rb>XK#@Hm3x7ke9m$Oo!?6Kx6RER*omdhd#y23 z{v8=@mO5j$gl(SaxT%1e}3Q%DZX!)H$_wf~J(Yc(B=<+1c>J*?MM_*4w zHiK_q8Ngo%Y!P_9{01MC-(rOfT{*$!^34-u%C}BXDBq^|8&%RK`Ab}N+7>?mMXs8J z@(>~+fnZ5N^-h;e^S^G2md3ZnT9c+vHi-5e_k}b~N=A8+>oDrdxu`Auflc__rJ05( zO+>B39M&jjoEA)&r*$e#sgs2rWA(l1qay8gDL)`So9+f4Qm`oSyTG0P)N^2CAK8BZ DKkxJa literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/store/entity/Store$StoreBuilder.class b/build/classes/java/main/com/example/umc10th/domain/store/entity/Store$StoreBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..ab5a1a911adb0a0e868d55f8577dabe4d52c5570 GIT binary patch literal 3486 zcmbtXTTdHD6#j;r!C49+lq7@#X-KfiWdps(KpWf;NX#Xe5>?urG@1or?EiaX- zKJ_2;XS7nPRH@V-&>vOx%?7k8u#n3Y^U8xosIy2dwKJ=n5g|vlBuoxbdyoxP;`*AA5D3tPBKs$;vTCsW~jsVbea@EJN}nG6J~sw1zBP(OM~9F8d+~^vd@wjNmFmuj7@tlAg;jS7_JCf>{&#aNWWvZZKS` z$RHq~f($4b#@(utj;$r3>IW9awQAZIM^gNtQ^`RK>>k40qyQNA$^Mo825D z=H0b$5BC|aR``L)doFF(OR4s06e#YhfZ?Y&So1|bgKI+Vd*w~;)3u<4PcCl8ZI~Uupq0Z++g_fYqYIim$yDtiUJ!7k zepinVPj>bfldn@tE%*3LT3*n-pU>sR8Kl0T58b=E4l>&Iv@!?p5B&?Ke!zo9+`T z1x2swm&CHvXDl7w?+>&Ztz8#^TJgeSvgCOxP(DA5h#mA|m0>&54&SC$W@LGR-J8_a zP=8Im(?iFUEIp1DDm|?gqXm{7=)v=93Z8dRJ(V6D1z z_vRfQ1cL4YE1t3xiVU}#LQL{Jg>M+fTdPtV6orYK)Ma!~1?!8rg)(v}EQD*dHO($Mo(A zh5h)1#@cDUeui@uU12d_Af6|4K6c<+kyoy)yWEQjb4^T$2C8ZR1D#ZtzE%@JBI^t}y>= z@%@jKhdzvd9b0_8v2<`lKDvm`MVN6BJDu*HVR#*;0NwQX55wBGVK=4zJ5Pc47h zVEHThBNCDK867Uo&B?zp@$JlOqTOrs({q`gVS297Gxi2IlgStbJekPrCFG5b7v?NX z6ILDmUzpM+qR$w8-eLx5WokOXR5!j3Ps)?JAeTeg1fJ4Yhxm-16>QRMh}`O>*8c_i Ku!U{x;QIe=mr>gQ literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/store/entity/Store.class b/build/classes/java/main/com/example/umc10th/domain/store/entity/Store.class new file mode 100644 index 0000000000000000000000000000000000000000..144e9b7fa862b867785ccf07dca021ab00dec977 GIT binary patch literal 3216 zcmc&%ZBrXn6n+-+LPB^cMI?X}T2x3&x2kwQT*a8$rZLucA4D`%1`j$ z=!}`p*cpF7|BZjZ@ws<50n!baevz5Y-j{QpbM86Mxo3Iv&!2w*SjB!EJsKXD?V2ur zF>1$Eq1S8W`}e#fy<*o4)6!kfc7!f0&-709Jvo_EziV}~S`khX8X_q~5z`RMnwIIU zXy~0^C?(K`L>$Q!`jOJG*p&$lJ!VD2aQ=mHV(3-FI@I&Fb+{}+2U8frFs)ifO=uW7 zC$r}{W*{|^!gVPXH!2lJxUSTEFNHC@uc5DMmkrOfEe#Ly|JAR2prd?9r!av@4gEFK zbqSO=U9aVC-7~AYTv4JQq%bW-la4qs#m{m*i5W!Vn5D+q`F0Loh_V;QEe+Szs)AW{ z9OKm2xrvB|^lqJ*sELy4ng>;}YFW0Yj^b(SjqBaB`!7TgIeKnkq- zmjMfxlV(M0Sn48XO)Z)nBuJ2d{{mWxJLHb!`E|ZM zIp^j<{6bc`zBzr2Rv4Ds=L;nbV;4!mTP7gJa6x!ScICO@Fv%V-I1PXQKYqVk`q~bA zDM*J*$@nDq?7CAHo2IPDr0T?XWo31`e>YU)CJiU)z}wwH1(&=1+rsqpb8p8!Uf6QSwX5Mn5+{<@1?~humUYZ3#SjTOff1KF4E< zEE8jfZ~52v8ruFV^!~=NhAe+$d;VtzM-dadYa9=!i~&p+$0I+8W=wtPGxR45YOCc zU?8*Dz_m;|(!gjY9hFk)SOZhPQ@>Xwe}t&OAb)4b?OWvPpz`UdZzCWAtpyb#N3sSa z2eYaQdeunQfketGwnx=S(mIA6j%985drKsj98Kd9_nvc{juCoTfy$y9<1@i$nvWmb zZ!Ux)BEQgstQU9)N$APWp^zu_X+B6{&`k5BXLO$op?d_oN^?(@;}9{5oPSGmya*nm U#7RVz({~)ne;xQqgzu5~7vNO}00000 literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/store/repository/LocationRepository.class b/build/classes/java/main/com/example/umc10th/domain/store/repository/LocationRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..321c8ebf4d2f585463351d09858942fd858b6620 GIT binary patch literal 386 zcmbV|Jx&8L5QU$^&yvv4aSH|tszs4#D3B#2a)QAz#>?7cdAsD2*Fc5o!n??2 z%vRw=|3tU?U)VGKr%xM;FKdtO#%nFnwewbCwvaI!d*S;k?(laUM_+QQcZIE5J2huu Mf@anCFkQ{rCkd>6od5s; literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/domain/store/repository/StoreRepository.class b/build/classes/java/main/com/example/umc10th/domain/store/repository/StoreRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..abd995720ed55310e5eeeb3ddda143687aa86d89 GIT binary patch literal 377 zcmbV|IZgvX5Ji8RWw1#II0t0{qDDw01ZX5A<^;vKX!kI^sHcbJ3LJ@m18^ur+d^PD zK_aL%c=dmMe7?N{xWr+FiGpr}BY9>Qd!f;_r}Mm|MR06A4LKyCBry!Ov@g`G7Pmih zgYh=-slUhFl)k?TDh`)QFgrbh?AAj;#y&+#9nzXFhRA> J2biww>1 zZ@kd)ujq_SZJqH4_@f-3v%7&MWHiuvvAgHI=RNPo^M37Lf4}?_z#P6vqeoz(>eLPO zOx7EgGMe@3#JIn0)GTLHT83bu=r;*L#4ZJBZ-JKCtXGr zvbc;Z0!a;*Kt9G6*{`|Y&ElHoO4ma?H0`}CZlFLsT;(+_|LEPwuRfG8mc~sD-7SIK zVQfPNfkdIWAu#;7Y5QhfZJ3_9X{kBec6{lZOdtWHq5*j#Jzu%c>Xxx1t4}@0Hsk@5 z@sRsf*J&u%-zy8Gf`p>~Yi7-se$%C6iS>1!WE}edk?#wE;Q!8MjZAwYm18)yV%Vj) zSaHyzWSER+E2ga;HS3$oU6({aqv=$owIN+o?<3+&mpVF{%=$VibFa~on_E`?wzIV= zU0GMenXvynvp#*?$=O!|jWH;8=|K#o8D5(uRNuam?o%kH&L95=6i#7D3j*fvqBN}_ zqrW>b90#4^wPo*gm(e`P$3qhYetJ#V9?E>R{K~T5FCBKw^GD`Gt7o!e{cV%=akop? zV~NasnmYNdR_sTk9=T-icIcA%isjTdou|eFWh+Z`gBLmn^LPj0TwQaTZdEOsy3OTc_}tdxL0~e#sOyHm;%+Ioj4K>TCH|@; zk=N6YyW8CL^K0-K_ejj^QAc844>Nvy^Z?`GM6kYtGsxgBCXvAVq&I*h@NB$QcCh!5@y%YjY-w*j73NKOB6nDHHDfx)&Y`~`}cet7+CDTJj zkbuaFa$v(uWWz!vx}yyuvY{tt!)RbbOHXKn){_!}p3u{K)G>>XJNcOi{TvGX9PaGr zr8Yl5q5Kp3IY$8Iu|Tji)_SKQOqG7aNIR~%m`^Euiu+_dL{n21NqN9W$Kf-6h5k|O zAo^mv==>=}^WU(8=&S9b&z(Z_5*|iDi34)IUG!jAqQh8!-UbYRVOb&?^B?F%ir6NZ8T{9y=g(ZTOuCZhg zu&^{nqJU{GT?omb5C)PIlcRtfujY7=iwdH0#DPRaUB)8{@4-q?$e+jK;a+5g^$>8AdXcnTQ)W>%19wT@165PohmE}sj literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/global/apiPayload/code/BaseSuccessCode.class b/build/classes/java/main/com/example/umc10th/global/apiPayload/code/BaseSuccessCode.class new file mode 100644 index 0000000000000000000000000000000000000000..30c85b0c1b8e2a49ac740f35d212c30d2005681e GIT binary patch literal 278 zcmZ9HJx&8b3`W06AWIes3hqGCU}&KNBt!uU(w@MXn8}9O%xY$qpQ}-D01k!lK!HSK z%hG%H=g+VA4*-`qs4y}(x1l3><*xTaLub!U^O~FwOZLQl`@nBL@QQ3$30-lLX0TRL zy4JbEj=|xEpP4*w9W9m{vDskiBsZD!kPMDz^Sclor9QS>_ZYd8mk^(5opVpOT7JO` zgG#Nk)!;~-zpYI!rUJDB_j;P0GIbM%XyvB$Mfex&q}US!gRy=Jj5X&jCMbC;?EUm< L=}OdEN7(-cED%gy literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/global/apiPayload/code/GeneralErrorCode.class b/build/classes/java/main/com/example/umc10th/global/apiPayload/code/GeneralErrorCode.class new file mode 100644 index 0000000000000000000000000000000000000000..83ddb2c168cf2ec87d3740348a3d6d02f1f95bb7 GIT binary patch literal 2777 zcmbtWZBr9h6n+*6d2!LWiWSs0Rn!n)0u@`^ASFOh+K^xZw5TmE$r@HRyL7X`_M0=c z4%L3JGqo@svHf7}Ovld9D3w<0__;sDtbd`?b8k`&FEir6OmeyBp7WgNo_k*M&%b{? z1`x(YC#nR5QbsnYd@g4vH6@tOrdnI9@nA+X#$+uhPpSj*7n&ibgDE4e1WzcsV#->? zG!3(x1a1hZ5#d0sfDK*Yp3y|))KDZjDByT>9k3yW>k{E+xZ+SOJT!PRp6ELr>0t*O zM2PIb-5XDI_4V{bVobVG#3n9{#Ro@w<3lm7yIF+9r1gEV!AK$&j*ccHiQ!0MG?GZf z6U=U_hog7L8n zO3Dg(unVs{@rDQ=-lRLcP>AUHERmX$wY(BPFW{)Z!n#|NbGcB3AZeMZo(WZYU;sRh zdqgy0uYlT|C0qHNfW1+}%mj0j%;dZ&XO)YFIT0MUtjXX>`bu&&Zn|HDAIE+=OccB#W6f@mS9?W(R?9Rjvh@-NfvYaVvN;l>fPIdPPw5z*YU z268UELut?*@9&St+FDvhTU~fpK%;$Yw)pGA;`N(8`-kuB!f*DiuZq{Ei`Q-+_7Kew zqtq^7bTuYx3dzdruavMWx!IN8XX(4wg>VJaR>rhjz%F}k(Y`ZRygqCHa>-}kxN6^+ zwXZIe$+{pifL@m71aPtf;0OcwK!DHw>D#9d9@%sEeNPvs34}q-OjlxTVi^6bCYj?*RQl;>TH()52OHLR-%*c4TDC6>>QDdwO&rjg{-Dp}LKu0Fx)$wz0~T z`t&I^r;@v{t{YV8s-e@V6xEFEm@!dq@RpJ$ODFj&g=1;&Dp#)n4=MDQYMwSt3U!>O z68pN+#xT>WE^9R%J{m8G>((oA{iYENn99#idSg0Cy|SQBht*DG~| zUd4P#T2Tl+Nh5EjlwOskQ2p}hd6>2P&Q>akUG(_`?#>1_N&#AF^zoG@9baj-@s*|- z&2EXcbiPu5<|}nzz}v`X8SSYDVH9Tx^&IVX)5`ul1#I~PuRX!`dD;n(>ARMnIZ5A# zF;sE=Hd>j5M-l>y*!ctk)2~{hpCXA^(n6YZP)OnskiNvA&m&U?3(}5(IRf{wdpXW# zyufi_oZn3)Wyb0PtpX;Xtpc=fIgs>HpzNwZf#pD3UIJ9bh6rkSoX(+|Gu|FJu=4>9 z1r9A>cc7tW0s8_Cjs*mMryEp8&Bd_;WDWX_P`WMqkG*9zm$BC@owE0IfW@@l0o@B2 z^l5^Z2C|pNtrwFV{4-R9%j;o{m4bGT&O#gr*yH*e!bo)i)ya{X0-VVaM}hKkq_%*% z(%aIp2YBxus=4eq;dV%!QWuvwxvYo0 zM5Gf^AD4N!>_hSym15EWm(_7uf*2&FA?YJ7^DbiK9=5Q+l?XNR0B^unN;W_0DD)dK TKr<~(q^im>u#hMHDop(c6$i#x literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/global/apiPayload/code/GeneralSuccessCode.class b/build/classes/java/main/com/example/umc10th/global/apiPayload/code/GeneralSuccessCode.class new file mode 100644 index 0000000000000000000000000000000000000000..1bca54a20f4ef7d5c44493130e8e23bb05f9d37d GIT binary patch literal 2265 zcmbtWTW=dh6#mASth3o9u1V8eN(oI$ZI@(|l2WMMG#An~)Q&3*mJknRyq-GSu6LvL zI=~x9eW<8-LkOWF6$$awN;JW=;-)_HQ;7Ksh%;+Loj6ic#nSG0&YttlcdomC{`1Qp z02Yu_5MVfOI2B!d%q#1b&}$WAX4+fR%a&8*md@ABtNato;U(R0N0VRSJBa#t8GWDbOvl7JBn-B1~niNZqWz2!W^{09ewRiU9*fvTYo{S0Bl za%{mc5Km-o@C~k8+%D_6;tgSVDHVqhQ}BX@0UT!Nd#bQ(*D6G7gIhI`yUuVX-e$dI z@oF{ICdhlPX_r&&CrAL_#UmPqFwD?Z^|)87GMvabZdtFcOOxv^uZWKv_olw)dF%RR zy5)T}-*i;NQM^cDmnmV0b)G0=_>zV(sijmXQ@kvsQ^z%oV}cG%o3`oAF$}izZ_!;z z6e0+B<0Rq=5;CLG zU$p7T0gygmp5{`|1F);OD2!^}skw%@Xv#u5(mB(oW73u&Ljd6I+~(w|D`Ib3Lg>9mtz;p9&k+>O(Vr#NBE z`@SuZvShVLE5j1r+5>20H&EX*ftL3KI<_0A{~165ITI1`@~F$!FwYY0(# zLBg=*B_4vRQm7(Yv3G7piQ!&5avTJI1ri8}1s}ji zA?Dr$s8B0K-FW7V$LGw9=jr+35x^dn%E%yFL@q!c1%chr#*!{o+>1yK;&6S(60Ip5WNf&DQR|2@b}fv=-Zf0zs1*Q~K;jP)v+J4;MA zA{)2tx%^IsobuG>C)>3#h5s_~WOUVI@?G0*DyL%d^?w?&E*2CjWwO zyhSBmD6T5mBla@vf5Ka$`Swo literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/example/umc10th/global/config/SwaggerConfig.class b/build/classes/java/main/com/example/umc10th/global/config/SwaggerConfig.class new file mode 100644 index 0000000000000000000000000000000000000000..6ce26c9381f49dc1b72b86ceae46414644019255 GIT binary patch literal 2723 zcmbtW{ZeJk5P z)}H2^K0qJEhw${yZiIN~rqGhZ%+Ac6`}w=~&R_5T_!Gba4&&%SB!(zQFZviR?rH~` zTGz~)x?b58RhOY}UN?330YfA;wHZS{!XzA$Pe}G`I+M;wlFJ+;k|cH@Y{x(T zlwn}yX*p3|UtKK5aFyY9s4|YIHf`N~rIy+s8)Cny+rkj08^;wy=mERj2C6vkQO}ox;{~x^9 zHO!r?30#ZV69FzUO#>9~drl;2@CoqN}X%YIa)5 zKXLqwUl`)mqr$_G?;^AVG+o?z9MB4bO1xF^QZpKLp*D@G>@I4pZdJ589huvDO>H-U zoWCMm<)}ZAI|{lficO;;?6Ovo%||I%Rjt0M*}7b}H>2*3PWduhIHQ~_)%bQ_WSB^u z!W<$C&%k4(lb-L(Mv%=#zx*mE^O<4jJ!MBLI$KffxJVXV3s}uN~M|6+&ldS z>{tJIi$-}2oQI&12L#wgjaCdh(1{6MW*kvs1=uabp1;9>68FHBiyjo^l851fGP>5n z6*~EB#>3~u7RKrO+Dr>cnp3nl^&4(@xT)On@Rc&};em&Rd(jpa>HOR49+q1u&}UIu z_wb#ECq(>wB(aVO|8b&7)BS^oBYy+9+!ka2 literal 0 HcmV?d00001 diff --git a/build/reports/problems/problems-report.html b/build/reports/problems/problems-report.html new file mode 100644 index 0000000..158fd51 --- /dev/null +++ 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 new file mode 100644 index 0000000..5acd671 --- /dev/null +++ b/build/resources/main/application.yml @@ -0,0 +1,16 @@ +spring: + datasource: + url: jdbc:mysql://localhost:3306/umc10th + username: root + password: 1s404s0705@@ + driver-class-name: com.mysql.cj.jdbc.Driver + + jpa: + hibernate: + ddl-auto: update + + show-sql: true + + properties: + hibernate: + format_sql: true \ No newline at end of file diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000000000000000000000000000000000000..4ebb3989a1e694fc83ba77260032ab7ad4546e54 GIT binary patch literal 55941 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�$t0yAWEKfR3Ok%s=_HO3G-TK)oM^`fLtK3 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 Lc}_KlC|UG> Date: Sat, 16 May 2026 22:48:30 +0900 Subject: [PATCH 6/8] =?UTF-8?q?feat:=20BaseEntity=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .../example/umc10th/Umc10thApplication.java | 2 ++ .../umc10th/domain/member/entity/Member.java | 10 +++---- .../domain/mission/entity/Mission.java | 14 ++-------- .../umc10th/domain/review/entity/Review.java | 13 ++------- .../umc10th/global/entity/BaseEntity.java | 25 ++++++++++++++++++ 6 files changed, 34 insertions(+), 30 deletions(-) create mode 100644 src/main/java/com/example/umc10th/global/entity/BaseEntity.java diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index ee719efb1bb6107cc1d46fb27532c3417354905c..5e3cdddef4ea26bb9c486db065db5948b9a9c8d3 100644 GIT binary patch literal 17 UcmZQJU_N?ehOz4c1_-bL04fRttN;K2 literal 17 UcmZQJU_N?ehOz4c1_&?(04f6mr2qf` diff --git a/src/main/java/com/example/umc10th/Umc10thApplication.java b/src/main/java/com/example/umc10th/Umc10thApplication.java index fdc2e33..c6bad04 100644 --- a/src/main/java/com/example/umc10th/Umc10thApplication.java +++ b/src/main/java/com/example/umc10th/Umc10thApplication.java @@ -2,7 +2,9 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; +@EnableJpaAuditing @SpringBootApplication public class Umc10thApplication { diff --git a/src/main/java/com/example/umc10th/domain/member/entity/Member.java b/src/main/java/com/example/umc10th/domain/member/entity/Member.java index fe7ecf1..5fef557 100644 --- a/src/main/java/com/example/umc10th/domain/member/entity/Member.java +++ b/src/main/java/com/example/umc10th/domain/member/entity/Member.java @@ -2,11 +2,11 @@ import com.example.umc10th.domain.member.enums.Gender; import com.example.umc10th.domain.review.entity.Review; +import com.example.umc10th.global.entity.BaseEntity; import jakarta.persistence.*; import lombok.*; import java.time.LocalDate; -import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @@ -16,7 +16,7 @@ @AllArgsConstructor @NoArgsConstructor(access = AccessLevel.PROTECTED) @Table(name = "member") -public class Member { +public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -39,15 +39,11 @@ public class Member { private Integer point; - @Column(name = "created_at") - private LocalDateTime createdAt; - @OneToMany(mappedBy = "member") private List reviewList = new ArrayList<>(); @PrePersist public void prePersist() { - this.createdAt = LocalDateTime.now(); - this.point = 0; + this.point = this.point == null ? 0 : this.point; } } \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/mission/entity/Mission.java b/src/main/java/com/example/umc10th/domain/mission/entity/Mission.java index e6cb080..00516eb 100644 --- a/src/main/java/com/example/umc10th/domain/mission/entity/Mission.java +++ b/src/main/java/com/example/umc10th/domain/mission/entity/Mission.java @@ -1,18 +1,17 @@ package com.example.umc10th.domain.mission.entity; import com.example.umc10th.domain.store.entity.Store; +import com.example.umc10th.global.entity.BaseEntity; import jakarta.persistence.*; import lombok.*; -import java.time.LocalDateTime; - @Entity @Getter @Builder @AllArgsConstructor @NoArgsConstructor(access = AccessLevel.PROTECTED) @Table(name = "mission") -public class Mission { +public class Mission extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -23,17 +22,8 @@ public class Mission { @JoinColumn(name = "store_id") private Store store; - @Column(nullable = false) private String title; @Column(columnDefinition = "TEXT") private String description; - - @Column(name = "created_at") - private LocalDateTime createdAt; - - @PrePersist - public void prePersist() { - this.createdAt = LocalDateTime.now(); - } } \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/review/entity/Review.java b/src/main/java/com/example/umc10th/domain/review/entity/Review.java index 4f6fe4a..3f334ec 100644 --- a/src/main/java/com/example/umc10th/domain/review/entity/Review.java +++ b/src/main/java/com/example/umc10th/domain/review/entity/Review.java @@ -2,18 +2,17 @@ import com.example.umc10th.domain.member.entity.Member; import com.example.umc10th.domain.store.entity.Store; +import com.example.umc10th.global.entity.BaseEntity; import jakarta.persistence.*; import lombok.*; -import java.time.LocalDateTime; - @Entity @Getter @Builder @AllArgsConstructor @NoArgsConstructor(access = AccessLevel.PROTECTED) @Table(name = "review") -public class Review { +public class Review extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -32,12 +31,4 @@ public class Review { private String content; private Integer rating; - - @Column(name = "created_at") - private LocalDateTime createdAt; - - @PrePersist - public void prePersist() { - this.createdAt = LocalDateTime.now(); - } } \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/global/entity/BaseEntity.java b/src/main/java/com/example/umc10th/global/entity/BaseEntity.java new file mode 100644 index 0000000..b271bd4 --- /dev/null +++ b/src/main/java/com/example/umc10th/global/entity/BaseEntity.java @@ -0,0 +1,25 @@ +package com.example.umc10th.global.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.EntityListeners; +import jakarta.persistence.MappedSuperclass; +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; + +@Getter +@MappedSuperclass +@EntityListeners(AuditingEntityListener.class) +public abstract class BaseEntity { + + @CreatedDate + @Column(name = "created_at", updatable = false) + private LocalDateTime createdAt; + + @LastModifiedDate + @Column(name = "updated_at") + private LocalDateTime updatedAt; +} \ No newline at end of file From 8e0bafcbfe48756e1ee1c23035f9f79337a1990e Mon Sep 17 00:00:00 2001 From: hwiyoon20010309 Date: Sat, 16 May 2026 23:26:21 +0900 Subject: [PATCH 7/8] feat: replace GeneralSuccessCode with domain-specific success enums --- .../member/controller/MemberController.java | 18 ++++++++--- .../exception/code/MemberSuccessCode.java | 17 +++++++++- .../controller/MemberMissionController.java | 4 +-- .../code/MemberMissionSuccessCode.java | 21 +++++++++++++ .../mission/controller/MissionController.java | 8 ++--- .../exception/code/MissionSuccessCode.java | 31 +++++++++++++++++++ .../review/controller/ReviewController.java | 4 +-- .../exception/code/ReviewSuccessCode.java | 21 +++++++++++++ .../apiPayload/code/GeneralSuccessCode.java | 16 ---------- 9 files changed, 111 insertions(+), 29 deletions(-) create mode 100644 src/main/java/com/example/umc10th/domain/memberMission/exception/code/MemberMissionSuccessCode.java create mode 100644 src/main/java/com/example/umc10th/domain/mission/exception/code/MissionSuccessCode.java create mode 100644 src/main/java/com/example/umc10th/domain/review/exception/code/ReviewSuccessCode.java delete mode 100644 src/main/java/com/example/umc10th/global/apiPayload/code/GeneralSuccessCode.java diff --git a/src/main/java/com/example/umc10th/domain/member/controller/MemberController.java b/src/main/java/com/example/umc10th/domain/member/controller/MemberController.java index bad5e2e..1853606 100644 --- a/src/main/java/com/example/umc10th/domain/member/controller/MemberController.java +++ b/src/main/java/com/example/umc10th/domain/member/controller/MemberController.java @@ -2,9 +2,9 @@ import com.example.umc10th.domain.member.dto.MemberReqDTO; import com.example.umc10th.domain.member.dto.MemberResDTO; +import com.example.umc10th.domain.member.exception.code.MemberSuccessCode; import com.example.umc10th.domain.member.service.MemberService; import com.example.umc10th.global.apiPayload.ApiResponse; -import com.example.umc10th.global.apiPayload.code.GeneralSuccessCode; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -20,7 +20,7 @@ public ApiResponse joinMember( @RequestBody MemberReqDTO.JoinDTO request ) { return ApiResponse.onSuccess( - GeneralSuccessCode.OK, + MemberSuccessCode.MEMBER_CREATED, memberService.joinMember(request) ); } @@ -30,17 +30,27 @@ public ApiResponse getMember( @PathVariable Long memberId ) { return ApiResponse.onSuccess( - GeneralSuccessCode.OK, + MemberSuccessCode.MEMBER_FOUND, memberService.getMember(memberId) ); } + @GetMapping("/{memberId}/my-page") + public ApiResponse getMyPage( + @PathVariable Long memberId + ) { + return ApiResponse.onSuccess( + MemberSuccessCode.MY_PAGE_FOUND, + memberService.getMyPage(memberId) + ); + } + @DeleteMapping("/{memberId}") public ApiResponse deleteMember( @PathVariable Long memberId ) { return ApiResponse.onSuccess( - GeneralSuccessCode.OK, + MemberSuccessCode.MEMBER_DELETED, memberService.deleteMember(memberId) ); } diff --git a/src/main/java/com/example/umc10th/domain/member/exception/code/MemberSuccessCode.java b/src/main/java/com/example/umc10th/domain/member/exception/code/MemberSuccessCode.java index 0de4243..668d2dd 100644 --- a/src/main/java/com/example/umc10th/domain/member/exception/code/MemberSuccessCode.java +++ b/src/main/java/com/example/umc10th/domain/member/exception/code/MemberSuccessCode.java @@ -9,13 +9,28 @@ @RequiredArgsConstructor public enum MemberSuccessCode implements BaseSuccessCode { + MEMBER_CREATED( + HttpStatus.CREATED, + "MEMBER201_1", + "회원 가입이 성공적으로 완료되었습니다." + ), MEMBER_FOUND( HttpStatus.OK, "MEMBER200_1", "성공적으로 회원을 조회했습니다." + ), + MY_PAGE_FOUND( + HttpStatus.OK, + "MEMBER200_2", + "마이페이지를 성공적으로 조회했습니다." + ), + MEMBER_DELETED( + HttpStatus.OK, + "MEMBER200_3", + "회원 탈퇴가 성공적으로 처리되었습니다." ); private final HttpStatus status; private final String code; private final String message; -} \ No newline at end of file +} diff --git a/src/main/java/com/example/umc10th/domain/memberMission/controller/MemberMissionController.java b/src/main/java/com/example/umc10th/domain/memberMission/controller/MemberMissionController.java index 252d145..25bdfcf 100644 --- a/src/main/java/com/example/umc10th/domain/memberMission/controller/MemberMissionController.java +++ b/src/main/java/com/example/umc10th/domain/memberMission/controller/MemberMissionController.java @@ -1,9 +1,9 @@ package com.example.umc10th.domain.memberMission.controller; import com.example.umc10th.domain.memberMission.dto.MemberMissionResDTO; +import com.example.umc10th.domain.memberMission.exception.code.MemberMissionSuccessCode; import com.example.umc10th.domain.memberMission.service.MemberMissionService; import com.example.umc10th.global.apiPayload.ApiResponse; -import com.example.umc10th.global.apiPayload.code.GeneralSuccessCode; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -21,7 +21,7 @@ public ApiResponse getMyMissions( @RequestParam(defaultValue = "0") Integer page ) { return ApiResponse.onSuccess( - GeneralSuccessCode.OK, + MemberMissionSuccessCode.MY_MISSION_FOUND, memberMissionService.getMyMissions(memberId, isComplete, page) ); } diff --git a/src/main/java/com/example/umc10th/domain/memberMission/exception/code/MemberMissionSuccessCode.java b/src/main/java/com/example/umc10th/domain/memberMission/exception/code/MemberMissionSuccessCode.java new file mode 100644 index 0000000..5766a7a --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/memberMission/exception/code/MemberMissionSuccessCode.java @@ -0,0 +1,21 @@ +package com.example.umc10th.domain.memberMission.exception.code; + +import com.example.umc10th.global.apiPayload.code.BaseSuccessCode; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; + +@Getter +@RequiredArgsConstructor +public enum MemberMissionSuccessCode implements BaseSuccessCode { + + MY_MISSION_FOUND( + HttpStatus.OK, + "MEMBER_MISSION200_1", + "내 미션 목록을 성공적으로 조회했습니다." + ); + + private final HttpStatus status; + private final String code; + private final String message; +} diff --git a/src/main/java/com/example/umc10th/domain/mission/controller/MissionController.java b/src/main/java/com/example/umc10th/domain/mission/controller/MissionController.java index 617a12f..fdb8d58 100644 --- a/src/main/java/com/example/umc10th/domain/mission/controller/MissionController.java +++ b/src/main/java/com/example/umc10th/domain/mission/controller/MissionController.java @@ -2,9 +2,9 @@ import com.example.umc10th.domain.mission.dto.MissionReqDTO; import com.example.umc10th.domain.mission.dto.MissionResDTO; +import com.example.umc10th.domain.mission.exception.code.MissionSuccessCode; import com.example.umc10th.domain.mission.service.MissionService; import com.example.umc10th.global.apiPayload.ApiResponse; -import com.example.umc10th.global.apiPayload.code.GeneralSuccessCode; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -20,7 +20,7 @@ public ApiResponse createMission( @RequestBody MissionReqDTO.CreateMissionDTO request ) { return ApiResponse.onSuccess( - GeneralSuccessCode.OK, + MissionSuccessCode.MISSION_CREATED, missionService.createMission(request) ); } @@ -30,7 +30,7 @@ public ApiResponse getMission( @PathVariable Long missionId ) { return ApiResponse.onSuccess( - GeneralSuccessCode.OK, + MissionSuccessCode.MISSION_FOUND, missionService.getMission(missionId) ); } @@ -41,7 +41,7 @@ public ApiResponse getHomeMissions( @RequestParam(defaultValue = "0") Integer page ) { return ApiResponse.onSuccess( - GeneralSuccessCode.OK, + MissionSuccessCode.HOME_MISSION_FOUND, missionService.getHomeMissions(locationId, page) ); } diff --git a/src/main/java/com/example/umc10th/domain/mission/exception/code/MissionSuccessCode.java b/src/main/java/com/example/umc10th/domain/mission/exception/code/MissionSuccessCode.java new file mode 100644 index 0000000..23f86aa --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/mission/exception/code/MissionSuccessCode.java @@ -0,0 +1,31 @@ +package com.example.umc10th.domain.mission.exception.code; + +import com.example.umc10th.global.apiPayload.code.BaseSuccessCode; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; + +@Getter +@RequiredArgsConstructor +public enum MissionSuccessCode implements BaseSuccessCode { + + MISSION_CREATED( + HttpStatus.CREATED, + "MISSION201_1", + "미션이 성공적으로 생성되었습니다." + ), + MISSION_FOUND( + HttpStatus.OK, + "MISSION200_1", + "성공적으로 미션을 조회했습니다." + ), + HOME_MISSION_FOUND( + HttpStatus.OK, + "MISSION200_2", + "홈 미션 목록을 성공적으로 조회했습니다." + ); + + private final HttpStatus status; + private final String code; + private final String message; +} diff --git a/src/main/java/com/example/umc10th/domain/review/controller/ReviewController.java b/src/main/java/com/example/umc10th/domain/review/controller/ReviewController.java index af34156..4c050d5 100644 --- a/src/main/java/com/example/umc10th/domain/review/controller/ReviewController.java +++ b/src/main/java/com/example/umc10th/domain/review/controller/ReviewController.java @@ -2,9 +2,9 @@ import com.example.umc10th.domain.review.dto.ReviewReqDTO; import com.example.umc10th.domain.review.dto.ReviewResDTO; +import com.example.umc10th.domain.review.exception.code.ReviewSuccessCode; import com.example.umc10th.domain.review.service.ReviewService; import com.example.umc10th.global.apiPayload.ApiResponse; -import com.example.umc10th.global.apiPayload.code.GeneralSuccessCode; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -21,7 +21,7 @@ public ApiResponse createReview( ) { return ApiResponse.onSuccess( - GeneralSuccessCode.OK, + ReviewSuccessCode.REVIEW_CREATED, reviewService.createReview(request) ); } diff --git a/src/main/java/com/example/umc10th/domain/review/exception/code/ReviewSuccessCode.java b/src/main/java/com/example/umc10th/domain/review/exception/code/ReviewSuccessCode.java new file mode 100644 index 0000000..913aca9 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/review/exception/code/ReviewSuccessCode.java @@ -0,0 +1,21 @@ +package com.example.umc10th.domain.review.exception.code; + +import com.example.umc10th.global.apiPayload.code.BaseSuccessCode; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; + +@Getter +@RequiredArgsConstructor +public enum ReviewSuccessCode implements BaseSuccessCode { + + REVIEW_CREATED( + HttpStatus.CREATED, + "REVIEW201_1", + "리뷰가 성공적으로 작성되었습니다." + ); + + private final HttpStatus status; + private final String code; + private final String message; +} diff --git a/src/main/java/com/example/umc10th/global/apiPayload/code/GeneralSuccessCode.java b/src/main/java/com/example/umc10th/global/apiPayload/code/GeneralSuccessCode.java deleted file mode 100644 index f4f42ef..0000000 --- a/src/main/java/com/example/umc10th/global/apiPayload/code/GeneralSuccessCode.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.example.umc10th.global.apiPayload.code; - -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import org.springframework.http.HttpStatus; - -@Getter -@RequiredArgsConstructor -public enum GeneralSuccessCode implements BaseSuccessCode { - - OK(HttpStatus.OK, "COMMON200_1", "성공적으로 요청을 처리했습니다."); - - private final HttpStatus status; - private final String code; - private final String message; -} \ No newline at end of file From a8e37b452e201a629e0a547059e02237d871f9fb Mon Sep 17 00:00:00 2001 From: hwiyoon20010309 Date: Sun, 17 May 2026 07:52:13 +0900 Subject: [PATCH 8/8] =?UTF-8?q?feat:=20=ED=9C=B4=EB=8B=88=20week7=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gradle/8.14/checksums/checksums.lock | Bin 17 -> 17 bytes .gradle/8.14/checksums/md5-checksums.bin | Bin 0 -> 18597 bytes .gradle/8.14/checksums/sha1-checksums.bin | Bin 0 -> 18659 bytes build.gradle | 1 + .../controller/MemberMissionController.java | 18 +++- .../dto/MemberMissionReqDTO.java | 19 +++++ .../service/MemberMissionService.java | 21 ++++- .../review/controller/ReviewController.java | 23 ++++- .../review/converter/ReviewConverter.java | 27 ++++++ .../domain/review/dto/ReviewReqDTO.java | 13 ++- .../domain/review/dto/ReviewResDTO.java | 21 +++++ .../review/exception/ReviewException.java | 11 +++ .../exception/code/ReviewErrorCode.java | 26 ++++++ .../exception/code/ReviewSuccessCode.java | 5 ++ .../review/repository/ReviewRepository.java | 33 +++++++- .../domain/review/service/ReviewService.java | 79 ++++++++++++++++++ .../exception/GeneralExceptionAdvice.java | 56 +++++++++++++ 17 files changed, 345 insertions(+), 8 deletions(-) create mode 100644 .gradle/8.14/checksums/md5-checksums.bin create mode 100644 .gradle/8.14/checksums/sha1-checksums.bin create mode 100644 src/main/java/com/example/umc10th/domain/review/exception/ReviewException.java create mode 100644 src/main/java/com/example/umc10th/domain/review/exception/code/ReviewErrorCode.java create mode 100644 src/main/java/com/example/umc10th/global/apiPayload/exception/GeneralExceptionAdvice.java diff --git a/.gradle/8.14/checksums/checksums.lock b/.gradle/8.14/checksums/checksums.lock index 641e17288c431ea78a376bebd886f54b01f80e6b..f5b7324da14d401b24e2432785340d38d98043d0 100644 GIT binary patch literal 17 UcmZQxd;hY^_sAV<86bcY075tgMF0Q* literal 17 TcmZQxd;hY^_sAV<8K3|FLN5h8 diff --git a/.gradle/8.14/checksums/md5-checksums.bin b/.gradle/8.14/checksums/md5-checksums.bin new file mode 100644 index 0000000000000000000000000000000000000000..bc698925149de40a64db2239d97c74968a24b31d GIT binary patch literal 18597 zcmeI(y-I^I6adiJK~M`;ROo1-Rs`_}>EzVXp`#9h+IMhq@C8I11$V*K)x}+*AP(+M zMRaoLCZbUDk$x0kz(GzR$>oMilCy@iLMWF8!xlzueiVub5FkK+009C72oNAZfB*pk z1PBlyK!5;&|01v(FEW`fQ(h@#!Srzm>%|xpE_S-#&6~yLwA^mw?+07&SN+eAyQN|N zD9`6}%s0}SkpKY#1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&U_)CG!xLNiQppx}c@1frB?Ju0yZ#ySnuX_g}j9qTDX4le*CZ^)N`n%%s bx_bKZT&;Bv$KM9`XHThOuAM4owzG;Kt)oOc literal 0 HcmV?d00001 diff --git a/.gradle/8.14/checksums/sha1-checksums.bin b/.gradle/8.14/checksums/sha1-checksums.bin new file mode 100644 index 0000000000000000000000000000000000000000..12854d1010d85d93567ae9ec03cf4a14ae96b7d5 GIT binary patch literal 18659 zcmeI%KS+W>7{~D^rNKXxzA3$nLxY>~mQLjmp@W+>6j*aDMN$yb5EPL^I0()bEe(O- z)RG9{AWb3I+$hlyLc86|y)P2YE%80LyNBoay)XA!FDqh(M$VA&h>lAt1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#~EF9I9tB7S`tGvTp|>5|AoP!-;%p0ArUmNxZqZqKlTJT>bz6 literal 0 HcmV?d00001 diff --git a/build.gradle b/build.gradle index aaf12d5..763b145 100644 --- a/build.gradle +++ b/build.gradle @@ -21,6 +21,7 @@ repositories { dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-webmvc' + implementation 'org.springframework.boot:spring-boot-starter-validation' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.mysql:mysql-connector-j' annotationProcessor 'org.projectlombok:lombok' diff --git a/src/main/java/com/example/umc10th/domain/memberMission/controller/MemberMissionController.java b/src/main/java/com/example/umc10th/domain/memberMission/controller/MemberMissionController.java index 25bdfcf..345bcd1 100644 --- a/src/main/java/com/example/umc10th/domain/memberMission/controller/MemberMissionController.java +++ b/src/main/java/com/example/umc10th/domain/memberMission/controller/MemberMissionController.java @@ -1,9 +1,11 @@ package com.example.umc10th.domain.memberMission.controller; +import com.example.umc10th.domain.memberMission.dto.MemberMissionReqDTO; import com.example.umc10th.domain.memberMission.dto.MemberMissionResDTO; import com.example.umc10th.domain.memberMission.exception.code.MemberMissionSuccessCode; import com.example.umc10th.domain.memberMission.service.MemberMissionService; import com.example.umc10th.global.apiPayload.ApiResponse; +import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -14,15 +16,27 @@ public class MemberMissionController { private final MemberMissionService memberMissionService; + /** 진행 중인 미션 조회 (오프셋, 회원 ID는 Request Body) */ + @PostMapping("/missions/ongoing") + public ApiResponse getOngoingMissions( + @RequestBody @Valid MemberMissionReqDTO.OngoingMissionsQuery request + ) { + return ApiResponse.onSuccess( + MemberMissionSuccessCode.MY_MISSION_FOUND, + memberMissionService.getOngoingMissions(request) + ); + } + @GetMapping("/{memberId}/missions") public ApiResponse getMyMissions( @PathVariable Long memberId, @RequestParam Boolean isComplete, - @RequestParam(defaultValue = "0") Integer page + @RequestParam(defaultValue = "0") Integer page, + @RequestParam(defaultValue = "10") Integer pageSize ) { return ApiResponse.onSuccess( MemberMissionSuccessCode.MY_MISSION_FOUND, - memberMissionService.getMyMissions(memberId, isComplete, page) + memberMissionService.getMyMissions(memberId, isComplete, page, pageSize) ); } } \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/memberMission/dto/MemberMissionReqDTO.java b/src/main/java/com/example/umc10th/domain/memberMission/dto/MemberMissionReqDTO.java index 31b9d97..bcbddab 100644 --- a/src/main/java/com/example/umc10th/domain/memberMission/dto/MemberMissionReqDTO.java +++ b/src/main/java/com/example/umc10th/domain/memberMission/dto/MemberMissionReqDTO.java @@ -1,4 +1,23 @@ package com.example.umc10th.domain.memberMission.dto; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; + public class MemberMissionReqDTO { + + /** 진행 중인 미션 조회 (오프셋 페이지네이션) */ + public record OngoingMissionsQuery( + @NotNull(message = "회원 ID는 필수입니다.") + Long memberId, + @NotNull(message = "페이지 번호는 필수입니다.") + @Min(value = 0, message = "페이지 번호는 0 이상이어야 합니다.") + Integer page, + @NotNull(message = "페이지 크기는 필수입니다.") + @Min(value = 1, message = "페이지 크기는 1 이상이어야 합니다.") + @Max(value = 100, message = "페이지 크기는 100 이하여야 합니다.") + Integer pageSize + ) { + } } + diff --git a/src/main/java/com/example/umc10th/domain/memberMission/service/MemberMissionService.java b/src/main/java/com/example/umc10th/domain/memberMission/service/MemberMissionService.java index 77c5ba0..64dab1f 100644 --- a/src/main/java/com/example/umc10th/domain/memberMission/service/MemberMissionService.java +++ b/src/main/java/com/example/umc10th/domain/memberMission/service/MemberMissionService.java @@ -3,9 +3,11 @@ import com.example.umc10th.domain.memberMission.dto.MemberMissionResDTO; import com.example.umc10th.domain.memberMission.entity.MemberMission; import com.example.umc10th.domain.memberMission.repository.MemberMissionRepository; +import com.example.umc10th.domain.memberMission.dto.MemberMissionReqDTO; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -18,16 +20,31 @@ public class MemberMissionService { private final MemberMissionRepository memberMissionRepository; + public MemberMissionResDTO.MyMissionListDTO getOngoingMissions( + MemberMissionReqDTO.OngoingMissionsQuery request + ) { + return getMyMissions( + request.memberId(), + false, + request.page(), + request.pageSize() + ); + } + public MemberMissionResDTO.MyMissionListDTO getMyMissions( Long memberId, Boolean isComplete, - Integer page + Integer page, + Integer pageSize ) { + PageRequest pageRequest = + PageRequest.of(page, pageSize, Sort.by("id").descending()); + Page memberMissionPage = memberMissionRepository.findMyMissions( memberId, isComplete, - PageRequest.of(page, 10) + pageRequest ); List missionList = diff --git a/src/main/java/com/example/umc10th/domain/review/controller/ReviewController.java b/src/main/java/com/example/umc10th/domain/review/controller/ReviewController.java index 4c050d5..3f5835a 100644 --- a/src/main/java/com/example/umc10th/domain/review/controller/ReviewController.java +++ b/src/main/java/com/example/umc10th/domain/review/controller/ReviewController.java @@ -5,19 +5,38 @@ import com.example.umc10th.domain.review.exception.code.ReviewSuccessCode; import com.example.umc10th.domain.review.service.ReviewService; import com.example.umc10th.global.apiPayload.ApiResponse; +import jakarta.validation.Valid; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @RestController @RequiredArgsConstructor +@Validated @RequestMapping("/reviews") public class ReviewController { private final ReviewService reviewService; + @GetMapping("/mine") + public ApiResponse> getMyReviews( + @RequestParam @NotNull(message = "회원 ID는 필수입니다.") Long memberId, + @RequestParam(defaultValue = "10") @Min(1) @Max(100) Integer pageSize, + @RequestParam(defaultValue = "-1") String cursor, + @RequestParam @NotNull(message = "정렬(sort)은 필수입니다. id 또는 rating") String sort + ) { + return ApiResponse.onSuccess( + ReviewSuccessCode.MY_REVIEWS_FOUND, + reviewService.getMyReviews(memberId, pageSize, cursor, sort) + ); + } + @PostMapping public ApiResponse createReview( - @RequestBody ReviewReqDTO.CreateReviewDTO request + @RequestBody @Valid ReviewReqDTO.CreateReviewDTO request ) { return ApiResponse.onSuccess( @@ -25,4 +44,4 @@ public ApiResponse createReview( reviewService.createReview(request) ); } -} \ No newline at end of file +} diff --git a/src/main/java/com/example/umc10th/domain/review/converter/ReviewConverter.java b/src/main/java/com/example/umc10th/domain/review/converter/ReviewConverter.java index eb41cd2..be9f60b 100644 --- a/src/main/java/com/example/umc10th/domain/review/converter/ReviewConverter.java +++ b/src/main/java/com/example/umc10th/domain/review/converter/ReviewConverter.java @@ -6,8 +6,35 @@ import com.example.umc10th.domain.review.entity.Review; import com.example.umc10th.domain.store.entity.Store; +import java.util.List; + public class ReviewConverter { + public static ReviewResDTO.MyReviewDTO toMyReview(Review review) { + return ReviewResDTO.MyReviewDTO.builder() + .reviewId(review.getId()) + .storeId(review.getStore().getId()) + .storeName(review.getStore().getName()) + .content(review.getContent()) + .rating(review.getRating()) + .createdAt(review.getCreatedAt()) + .build(); + } + + public static ReviewResDTO.CursorPagination toCursorPagination( + List data, + Boolean hasNext, + String nextCursor, + Integer pageSize + ) { + return ReviewResDTO.CursorPagination.builder() + .data(data) + .hasNext(hasNext) + .nextCursor(nextCursor) + .pageSize(pageSize) + .build(); + } + public static Review toReview( ReviewReqDTO.CreateReviewDTO request, Member member, diff --git a/src/main/java/com/example/umc10th/domain/review/dto/ReviewReqDTO.java b/src/main/java/com/example/umc10th/domain/review/dto/ReviewReqDTO.java index 0e0b928..0ea0582 100644 --- a/src/main/java/com/example/umc10th/domain/review/dto/ReviewReqDTO.java +++ b/src/main/java/com/example/umc10th/domain/review/dto/ReviewReqDTO.java @@ -1,12 +1,23 @@ package com.example.umc10th.domain.review.dto; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; + public class ReviewReqDTO { public record CreateReviewDTO( + @NotNull(message = "회원 ID는 필수입니다.") Long memberId, + @NotNull(message = "가게 ID는 필수입니다.") Long storeId, + @NotBlank(message = "리뷰 내용은 필수입니다.") String content, + @NotNull(message = "별점은 필수입니다.") + @Min(value = 1, message = "별점은 1 이상이어야 합니다.") + @Max(value = 5, message = "별점은 5 이하여야 합니다.") Integer rating ) { } -} \ No newline at end of file +} diff --git a/src/main/java/com/example/umc10th/domain/review/dto/ReviewResDTO.java b/src/main/java/com/example/umc10th/domain/review/dto/ReviewResDTO.java index dbdb36c..29b857c 100644 --- a/src/main/java/com/example/umc10th/domain/review/dto/ReviewResDTO.java +++ b/src/main/java/com/example/umc10th/domain/review/dto/ReviewResDTO.java @@ -3,9 +3,30 @@ import lombok.Builder; import java.time.LocalDateTime; +import java.util.List; public class ReviewResDTO { + @Builder + public record MyReviewDTO( + Long reviewId, + Long storeId, + String storeName, + String content, + Integer rating, + LocalDateTime createdAt + ) { + } + + @Builder + public record CursorPagination( + List data, + Boolean hasNext, + String nextCursor, + Integer pageSize + ) { + } + @Builder public record CreateReviewResultDTO( Long reviewId, diff --git a/src/main/java/com/example/umc10th/domain/review/exception/ReviewException.java b/src/main/java/com/example/umc10th/domain/review/exception/ReviewException.java new file mode 100644 index 0000000..98fb135 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/review/exception/ReviewException.java @@ -0,0 +1,11 @@ +package com.example.umc10th.domain.review.exception; + +import com.example.umc10th.global.apiPayload.code.BaseErrorCode; +import com.example.umc10th.global.apiPayload.exception.ProjectException; + +public class ReviewException extends ProjectException { + + public ReviewException(BaseErrorCode errorCode) { + super(errorCode); + } +} diff --git a/src/main/java/com/example/umc10th/domain/review/exception/code/ReviewErrorCode.java b/src/main/java/com/example/umc10th/domain/review/exception/code/ReviewErrorCode.java new file mode 100644 index 0000000..3cfb0dc --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/review/exception/code/ReviewErrorCode.java @@ -0,0 +1,26 @@ +package com.example.umc10th.domain.review.exception.code; + +import com.example.umc10th.global.apiPayload.code.BaseErrorCode; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; + +@Getter +@RequiredArgsConstructor +public enum ReviewErrorCode implements BaseErrorCode { + + INVALID_SORT( + HttpStatus.BAD_REQUEST, + "REVIEW400_1", + "정렬(sort)은 id 또는 rating 만 허용됩니다." + ), + INVALID_CURSOR( + HttpStatus.BAD_REQUEST, + "REVIEW400_2", + "커서 형식이 올바르지 않습니다." + ); + + private final HttpStatus status; + private final String code; + private final String message; +} diff --git a/src/main/java/com/example/umc10th/domain/review/exception/code/ReviewSuccessCode.java b/src/main/java/com/example/umc10th/domain/review/exception/code/ReviewSuccessCode.java index 913aca9..cb1ac0f 100644 --- a/src/main/java/com/example/umc10th/domain/review/exception/code/ReviewSuccessCode.java +++ b/src/main/java/com/example/umc10th/domain/review/exception/code/ReviewSuccessCode.java @@ -13,6 +13,11 @@ public enum ReviewSuccessCode implements BaseSuccessCode { HttpStatus.CREATED, "REVIEW201_1", "리뷰가 성공적으로 작성되었습니다." + ), + MY_REVIEWS_FOUND( + HttpStatus.OK, + "REVIEW200_1", + "작성한 리뷰 목록을 성공적으로 조회했습니다." ); private final HttpStatus status; diff --git a/src/main/java/com/example/umc10th/domain/review/repository/ReviewRepository.java b/src/main/java/com/example/umc10th/domain/review/repository/ReviewRepository.java index 94ae4e3..cb6dbfd 100644 --- a/src/main/java/com/example/umc10th/domain/review/repository/ReviewRepository.java +++ b/src/main/java/com/example/umc10th/domain/review/repository/ReviewRepository.java @@ -1,8 +1,39 @@ package com.example.umc10th.domain.review.repository; import com.example.umc10th.domain.review.entity.Review; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Slice; +import org.springframework.data.jpa.repository.EntityGraph; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; public interface ReviewRepository extends JpaRepository { -} \ No newline at end of file + @EntityGraph(attributePaths = { "store" }) + Slice findByMember_IdOrderByIdDesc(Long memberId, Pageable pageable); + + @EntityGraph(attributePaths = { "store" }) + Slice findByMember_IdAndIdLessThanOrderByIdDesc( + Long memberId, + Long id, + Pageable pageable + ); + + @EntityGraph(attributePaths = { "store" }) + Slice findByMember_IdOrderByRatingDescIdDesc(Long memberId, Pageable pageable); + + @EntityGraph(attributePaths = { "store" }) + @Query(""" + select r from Review r + where r.member.id = :memberId + and (r.rating < :lastRating or (r.rating = :lastRating and r.id < :lastId)) + order by r.rating desc, r.id desc + """) + Slice sliceByMember_IdAndRatingCursor( + @Param("memberId") Long memberId, + @Param("lastRating") Integer lastRating, + @Param("lastId") Long lastId, + Pageable pageable + ); +} diff --git a/src/main/java/com/example/umc10th/domain/review/service/ReviewService.java b/src/main/java/com/example/umc10th/domain/review/service/ReviewService.java index 5a6549d..370e741 100644 --- a/src/main/java/com/example/umc10th/domain/review/service/ReviewService.java +++ b/src/main/java/com/example/umc10th/domain/review/service/ReviewService.java @@ -6,22 +6,101 @@ import com.example.umc10th.domain.review.dto.ReviewReqDTO; import com.example.umc10th.domain.review.dto.ReviewResDTO; import com.example.umc10th.domain.review.entity.Review; +import com.example.umc10th.domain.review.exception.ReviewException; +import com.example.umc10th.domain.review.exception.code.ReviewErrorCode; import com.example.umc10th.domain.review.repository.ReviewRepository; import com.example.umc10th.domain.store.entity.Store; import com.example.umc10th.domain.store.repository.StoreRepository; import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Slice; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + @Service @RequiredArgsConstructor @Transactional(readOnly = true) public class ReviewService { + private static final String INITIAL_CURSOR = "-1"; + private final ReviewRepository reviewRepository; private final MemberRepository memberRepository; private final StoreRepository storeRepository; + public ReviewResDTO.CursorPagination getMyReviews( + Long memberId, + Integer pageSize, + String cursor, + String sort + ) { + String normalizedSort = sort.trim().toLowerCase(); + if (!normalizedSort.equals("id") && !normalizedSort.equals("rating")) { + throw new ReviewException(ReviewErrorCode.INVALID_SORT); + } + + PageRequest pageRequest = PageRequest.of(0, pageSize); + Slice slice; + + if (INITIAL_CURSOR.equals(cursor)) { + slice = switch (normalizedSort) { + case "id" -> reviewRepository.findByMember_IdOrderByIdDesc(memberId, pageRequest); + case "rating" -> reviewRepository.findByMember_IdOrderByRatingDescIdDesc( + memberId, + pageRequest + ); + default -> throw new ReviewException(ReviewErrorCode.INVALID_SORT); + }; + } else { + String[] parts = cursor.split(":"); + if (parts.length != 2) { + throw new ReviewException(ReviewErrorCode.INVALID_CURSOR); + } + try { + slice = switch (normalizedSort) { + case "id" -> { + long idBound = Long.parseLong(parts[1]); + yield reviewRepository.findByMember_IdAndIdLessThanOrderByIdDesc( + memberId, + idBound, + pageRequest + ); + } + case "rating" -> { + int lastRating = Integer.parseInt(parts[0]); + long lastId = Long.parseLong(parts[1]); + yield reviewRepository.sliceByMember_IdAndRatingCursor( + memberId, + lastRating, + lastId, + pageRequest + ); + } + default -> throw new ReviewException(ReviewErrorCode.INVALID_SORT); + }; + } catch (NumberFormatException ex) { + throw new ReviewException(ReviewErrorCode.INVALID_CURSOR); + } + } + + List data = + slice.getContent().stream().map(ReviewConverter::toMyReview).toList(); + + String nextCursor = null; + if (slice.hasNext() && !slice.getContent().isEmpty()) { + Review last = slice.getContent().getLast(); + nextCursor = switch (normalizedSort) { + case "id" -> last.getId() + ":" + last.getId(); + case "rating" -> last.getRating() + ":" + last.getId(); + default -> null; + }; + } + + return ReviewConverter.toCursorPagination(data, slice.hasNext(), nextCursor, pageSize); + } + @Transactional public ReviewResDTO.CreateReviewResultDTO createReview( ReviewReqDTO.CreateReviewDTO request diff --git a/src/main/java/com/example/umc10th/global/apiPayload/exception/GeneralExceptionAdvice.java b/src/main/java/com/example/umc10th/global/apiPayload/exception/GeneralExceptionAdvice.java new file mode 100644 index 0000000..20a4100 --- /dev/null +++ b/src/main/java/com/example/umc10th/global/apiPayload/exception/GeneralExceptionAdvice.java @@ -0,0 +1,56 @@ +package com.example.umc10th.global.apiPayload.exception; + +import com.example.umc10th.global.apiPayload.ApiResponse; +import com.example.umc10th.global.apiPayload.code.BaseErrorCode; +import com.example.umc10th.global.apiPayload.code.GeneralErrorCode; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.ConstraintViolationException; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import java.util.HashMap; +import java.util.Map; +import java.util.stream.Collectors; + +@RestControllerAdvice +public class GeneralExceptionAdvice { + + @ExceptionHandler(MethodArgumentNotValidException.class) + public ResponseEntity>> handleMethodArgumentNotValid( + MethodArgumentNotValidException e + ) { + Map errors = new HashMap<>(); + e.getBindingResult().getFieldErrors().forEach(error -> + errors.put(error.getField(), error.getDefaultMessage()) + ); + + BaseErrorCode code = GeneralErrorCode.BAD_REQUEST; + return ResponseEntity.status(code.getStatus()) + .body(ApiResponse.onFailure(code, errors)); + } + + @ExceptionHandler(ConstraintViolationException.class) + public ResponseEntity>> handleConstraintViolation( + ConstraintViolationException e + ) { + Map errors = e.getConstraintViolations().stream() + .collect(Collectors.toMap( + v -> v.getPropertyPath().toString(), + ConstraintViolation::getMessage, + (a, b) -> a + "; " + b + )); + + BaseErrorCode code = GeneralErrorCode.BAD_REQUEST; + return ResponseEntity.status(code.getStatus()) + .body(ApiResponse.onFailure(code, errors)); + } + + @ExceptionHandler(ProjectException.class) + public ResponseEntity> handleProjectException(ProjectException e) { + BaseErrorCode code = e.getErrorCode(); + return ResponseEntity.status(code.getStatus()) + .body(ApiResponse.onFailure(code, null)); + } +}