From e68b91e9f41141a07d1a419ab4bdf77d76683cf3 Mon Sep 17 00:00:00 2001 From: sjiwon Date: Mon, 26 Feb 2024 21:21:00 +0900 Subject: [PATCH 1/9] =?UTF-8?q?refactor:=20=EB=8D=94=EB=AF=B8=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=EC=9E=90=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20api=20layer=EC=97=90=EC=84=9C=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 개발 서버 일회성이기 때문에 굳이 layer 나눌 필요 X --- .../admin/controller/DummyAccountLoginApi.kt | 31 +++++++++++++---- .../admin/service/DummyAccountLoginService.kt | 34 ------------------- 2 files changed, 25 insertions(+), 40 deletions(-) delete mode 100644 src/main/java/com/koddy/server/admin/service/DummyAccountLoginService.kt diff --git a/src/main/java/com/koddy/server/admin/controller/DummyAccountLoginApi.kt b/src/main/java/com/koddy/server/admin/controller/DummyAccountLoginApi.kt index 488db103..8d8f5fe6 100644 --- a/src/main/java/com/koddy/server/admin/controller/DummyAccountLoginApi.kt +++ b/src/main/java/com/koddy/server/admin/controller/DummyAccountLoginApi.kt @@ -1,10 +1,17 @@ package com.koddy.server.admin.controller -import com.koddy.server.admin.service.DummyAccountLoginService import com.koddy.server.admin.utils.NotProvidedInProduction -import com.koddy.server.auth.domain.model.AuthMember +import com.koddy.server.auth.domain.model.AuthToken +import com.koddy.server.auth.domain.service.TokenIssuer +import com.koddy.server.auth.utils.TokenResponseWriter import com.koddy.server.member.domain.model.Email +import com.koddy.server.member.domain.model.Member +import com.koddy.server.member.domain.repository.MemberRepository +import com.koddy.server.member.exception.MemberException +import com.koddy.server.member.exception.MemberExceptionCode.MEMBER_NOT_FOUND +import jakarta.servlet.http.HttpServletResponse import jakarta.validation.constraints.NotBlank +import org.springframework.beans.factory.annotation.Value import org.springframework.http.ResponseEntity import org.springframework.web.bind.annotation.PostMapping import org.springframework.web.bind.annotation.RequestBody @@ -14,7 +21,10 @@ import org.springframework.web.bind.annotation.RestController @RestController @RequestMapping("/api/auth/dummy/login") class DummyAccountLoginApi( - private val dummyAccountLoginService: DummyAccountLoginService, + private val memberRepository: MemberRepository, + private val tokenIssuer: TokenIssuer, + private val tokenResponseWriter: TokenResponseWriter, + @Value("\${account.dummy}") private val dummyAccountPassword: String, ) { data class LoginRequest( @field:NotBlank(message = "이메일은 필수입니다.") @@ -28,8 +38,17 @@ class DummyAccountLoginApi( @NotProvidedInProduction fun login( @RequestBody request: LoginRequest, - ): ResponseEntity { - val authMember: AuthMember = dummyAccountLoginService.invoke(Email.from(request.email), request.password) - return ResponseEntity.ok(authMember) + response: HttpServletResponse, + ): ResponseEntity { + val member: Member<*> = memberRepository.findByPlatformEmail(Email.from(request.email)) + .orElseThrow { MemberException(MEMBER_NOT_FOUND) } + + if (dummyAccountPassword != request.password) { + throw MemberException(MEMBER_NOT_FOUND) + } + + val authToken: AuthToken = tokenIssuer.provideAuthorityToken(member.id, member.authority) + tokenResponseWriter.applyToken(response, authToken) + return ResponseEntity.ok().build() } } diff --git a/src/main/java/com/koddy/server/admin/service/DummyAccountLoginService.kt b/src/main/java/com/koddy/server/admin/service/DummyAccountLoginService.kt deleted file mode 100644 index 81d2a23a..00000000 --- a/src/main/java/com/koddy/server/admin/service/DummyAccountLoginService.kt +++ /dev/null @@ -1,34 +0,0 @@ -package com.koddy.server.admin.service - -import com.koddy.server.auth.domain.model.AuthMember -import com.koddy.server.auth.domain.model.AuthToken -import com.koddy.server.auth.domain.service.TokenIssuer -import com.koddy.server.global.annotation.UseCase -import com.koddy.server.member.domain.model.Email -import com.koddy.server.member.domain.model.Member -import com.koddy.server.member.domain.repository.MemberRepository -import com.koddy.server.member.exception.MemberException -import com.koddy.server.member.exception.MemberExceptionCode -import org.springframework.beans.factory.annotation.Value - -@UseCase -class DummyAccountLoginService( - private val memberRepository: MemberRepository, - private val tokenIssuer: TokenIssuer, - @Value("\${account.dummy}") private val dummyAccountPassword: String, -) { - fun invoke( - email: Email, - password: String, - ): AuthMember { - val member: Member<*> = memberRepository.findByPlatformEmail(email) - .orElseThrow { MemberException(MemberExceptionCode.MEMBER_NOT_FOUND) } - - if (dummyAccountPassword != password) { - throw MemberException(MemberExceptionCode.MEMBER_NOT_FOUND) - } - - val authToken: AuthToken = tokenIssuer.provideAuthorityToken(member.id, member.authority) - return AuthMember(member, authToken) - } -} From d9e8351fec85a7c0e362c425e21341abe5cb4ff1 Mon Sep 17 00:00:00 2001 From: sjiwon Date: Mon, 26 Feb 2024 21:44:45 +0900 Subject: [PATCH 2/9] =?UTF-8?q?fix:=20ApiDocsTest=20=EA=B4=80=EB=A0=A8=20C?= =?UTF-8?q?ontroller=20Injection=20`@UseCase`=EC=97=90=20=EB=8C=80?= =?UTF-8?q?=ED=95=9C=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/DummyAccountLoginApi.kt | 20 ++---------- .../admin/service/DummyAccountLoginService.kt | 32 +++++++++++++++++++ 2 files changed, 35 insertions(+), 17 deletions(-) create mode 100644 src/main/java/com/koddy/server/admin/service/DummyAccountLoginService.kt diff --git a/src/main/java/com/koddy/server/admin/controller/DummyAccountLoginApi.kt b/src/main/java/com/koddy/server/admin/controller/DummyAccountLoginApi.kt index 8d8f5fe6..3954682a 100644 --- a/src/main/java/com/koddy/server/admin/controller/DummyAccountLoginApi.kt +++ b/src/main/java/com/koddy/server/admin/controller/DummyAccountLoginApi.kt @@ -1,17 +1,12 @@ package com.koddy.server.admin.controller +import com.koddy.server.admin.service.DummyAccountLoginService import com.koddy.server.admin.utils.NotProvidedInProduction import com.koddy.server.auth.domain.model.AuthToken -import com.koddy.server.auth.domain.service.TokenIssuer import com.koddy.server.auth.utils.TokenResponseWriter import com.koddy.server.member.domain.model.Email -import com.koddy.server.member.domain.model.Member -import com.koddy.server.member.domain.repository.MemberRepository -import com.koddy.server.member.exception.MemberException -import com.koddy.server.member.exception.MemberExceptionCode.MEMBER_NOT_FOUND import jakarta.servlet.http.HttpServletResponse import jakarta.validation.constraints.NotBlank -import org.springframework.beans.factory.annotation.Value import org.springframework.http.ResponseEntity import org.springframework.web.bind.annotation.PostMapping import org.springframework.web.bind.annotation.RequestBody @@ -21,10 +16,8 @@ import org.springframework.web.bind.annotation.RestController @RestController @RequestMapping("/api/auth/dummy/login") class DummyAccountLoginApi( - private val memberRepository: MemberRepository, - private val tokenIssuer: TokenIssuer, + private val dummyAccountLoginService: DummyAccountLoginService, private val tokenResponseWriter: TokenResponseWriter, - @Value("\${account.dummy}") private val dummyAccountPassword: String, ) { data class LoginRequest( @field:NotBlank(message = "이메일은 필수입니다.") @@ -40,14 +33,7 @@ class DummyAccountLoginApi( @RequestBody request: LoginRequest, response: HttpServletResponse, ): ResponseEntity { - val member: Member<*> = memberRepository.findByPlatformEmail(Email.from(request.email)) - .orElseThrow { MemberException(MEMBER_NOT_FOUND) } - - if (dummyAccountPassword != request.password) { - throw MemberException(MEMBER_NOT_FOUND) - } - - val authToken: AuthToken = tokenIssuer.provideAuthorityToken(member.id, member.authority) + val authToken: AuthToken = dummyAccountLoginService.invoke(Email.from(request.email), request.password) tokenResponseWriter.applyToken(response, authToken) return ResponseEntity.ok().build() } diff --git a/src/main/java/com/koddy/server/admin/service/DummyAccountLoginService.kt b/src/main/java/com/koddy/server/admin/service/DummyAccountLoginService.kt new file mode 100644 index 00000000..14d278c6 --- /dev/null +++ b/src/main/java/com/koddy/server/admin/service/DummyAccountLoginService.kt @@ -0,0 +1,32 @@ +package com.koddy.server.admin.service + +import com.koddy.server.auth.domain.model.AuthToken +import com.koddy.server.auth.domain.service.TokenIssuer +import com.koddy.server.global.annotation.UseCase +import com.koddy.server.member.domain.model.Email +import com.koddy.server.member.domain.model.Member +import com.koddy.server.member.domain.repository.MemberRepository +import com.koddy.server.member.exception.MemberException +import com.koddy.server.member.exception.MemberExceptionCode.MEMBER_NOT_FOUND +import org.springframework.beans.factory.annotation.Value + +@UseCase +class DummyAccountLoginService( + private val memberRepository: MemberRepository, + private val tokenIssuer: TokenIssuer, + @Value("\${account.dummy}") private val dummyAccountPassword: String, +) { + fun invoke( + email: Email, + password: String, + ): AuthToken { + val member: Member<*> = memberRepository.findByPlatformEmail(email) + .orElseThrow { MemberException(MEMBER_NOT_FOUND) } + + if (dummyAccountPassword != password) { + throw MemberException(MEMBER_NOT_FOUND) + } + + return tokenIssuer.provideAuthorityToken(member.id, member.authority) + } +} From 5cfc4776cfac8948d9320b2d9b9bb37c8799fac5 Mon Sep 17 00:00:00 2001 From: sjiwon Date: Mon, 26 Feb 2024 21:45:02 +0900 Subject: [PATCH 3/9] =?UTF-8?q?refactor:=20AuthenticationMentorUnivApi=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=ED=81=B4=EB=9E=98=EC=8A=A4=20Kotlin=20?= =?UTF-8?q?=EC=A0=84=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/global/utils/UniversityInfo.kt | 1 - .../AuthenticationMentorUnivApi.java | 81 ------------------ .../AuthenticationMentorUnivApi.kt | 82 +++++++++++++++++++ .../AuthenticationConfirmWithMailRequest.java | 12 --- .../AuthenticationConfirmWithMailRequest.kt | 11 +++ .../AuthenticationWithMailRequest.java | 9 -- .../request/AuthenticationWithMailRequest.kt | 8 ++ .../AuthenticationWithProofDataRequest.java | 9 -- .../AuthenticationWithProofDataRequest.kt | 8 ++ 9 files changed, 109 insertions(+), 112 deletions(-) delete mode 100644 src/main/java/com/koddy/server/member/presentation/AuthenticationMentorUnivApi.java create mode 100644 src/main/java/com/koddy/server/member/presentation/AuthenticationMentorUnivApi.kt delete mode 100644 src/main/java/com/koddy/server/member/presentation/request/AuthenticationConfirmWithMailRequest.java create mode 100644 src/main/java/com/koddy/server/member/presentation/request/AuthenticationConfirmWithMailRequest.kt delete mode 100644 src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithMailRequest.java create mode 100644 src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithMailRequest.kt delete mode 100644 src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithProofDataRequest.java create mode 100644 src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithProofDataRequest.kt diff --git a/src/main/java/com/koddy/server/global/utils/UniversityInfo.kt b/src/main/java/com/koddy/server/global/utils/UniversityInfo.kt index 3ca480da..70147cab 100644 --- a/src/main/java/com/koddy/server/global/utils/UniversityInfo.kt +++ b/src/main/java/com/koddy/server/global/utils/UniversityInfo.kt @@ -72,7 +72,6 @@ enum class UniversityInfo( companion object { private val log: Logger = logger() - @JvmStatic fun validateDomain( authenticated: Authenticated, schoolMail: String, diff --git a/src/main/java/com/koddy/server/member/presentation/AuthenticationMentorUnivApi.java b/src/main/java/com/koddy/server/member/presentation/AuthenticationMentorUnivApi.java deleted file mode 100644 index f0269f04..00000000 --- a/src/main/java/com/koddy/server/member/presentation/AuthenticationMentorUnivApi.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.koddy.server.member.presentation; - -import com.koddy.server.auth.domain.model.Authenticated; -import com.koddy.server.global.annotation.Auth; -import com.koddy.server.global.aop.AccessControl; -import com.koddy.server.global.aop.DailyMailAuthLimit; -import com.koddy.server.global.utils.UniversityInfo; -import com.koddy.server.member.application.usecase.AuthenticationMentorUnivUseCase; -import com.koddy.server.member.application.usecase.command.AuthenticationConfirmWithMailCommand; -import com.koddy.server.member.application.usecase.command.AuthenticationWithMailCommand; -import com.koddy.server.member.application.usecase.command.AuthenticationWithProofDataCommand; -import com.koddy.server.member.presentation.request.AuthenticationConfirmWithMailRequest; -import com.koddy.server.member.presentation.request.AuthenticationWithMailRequest; -import com.koddy.server.member.presentation.request.AuthenticationWithProofDataRequest; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.validation.Valid; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import static com.koddy.server.member.domain.model.Role.MENTOR; - -@Tag(name = "2-5. 멘토 학교 인증 API") -@RestController -@RequestMapping("/api/mentors/me/univ") -public class AuthenticationMentorUnivApi { - private final AuthenticationMentorUnivUseCase authenticationMentorUnivUseCase; - - public AuthenticationMentorUnivApi(final AuthenticationMentorUnivUseCase authenticationMentorUnivUseCase) { - this.authenticationMentorUnivUseCase = authenticationMentorUnivUseCase; - } - - @Operation(summary = "메일 인증 시도 Endpoint") - @PostMapping("/mail") - @AccessControl(role = MENTOR) - @DailyMailAuthLimit - public ResponseEntity authWithMail( - @Auth final Authenticated authenticated, - @RequestBody @Valid final AuthenticationWithMailRequest request - ) { - UniversityInfo.validateDomain(authenticated, request.schoolMail()); - authenticationMentorUnivUseCase.authWithMail(new AuthenticationWithMailCommand( - authenticated.id, - request.schoolMail() - )); - return ResponseEntity.noContent().build(); - } - - @Operation(summary = "메일 인증 확인 Endpoint") - @PostMapping("/mail/confirm") - @AccessControl(role = MENTOR) - public ResponseEntity confirmMailAuthCode( - @Auth final Authenticated authenticated, - @RequestBody @Valid final AuthenticationConfirmWithMailRequest request - ) { - UniversityInfo.validateDomain(authenticated, request.schoolMail()); - authenticationMentorUnivUseCase.confirmMailAuthCode(new AuthenticationConfirmWithMailCommand( - authenticated.id, - request.schoolMail(), - request.authCode() - )); - return ResponseEntity.noContent().build(); - } - - @Operation(summary = "증명자료 인증 시도 Endpoint") - @PostMapping("/proof-data") - @AccessControl(role = MENTOR) - public ResponseEntity authWithProofData( - @Auth final Authenticated authenticated, - @RequestBody @Valid final AuthenticationWithProofDataRequest request - ) { - authenticationMentorUnivUseCase.authWithProofData(new AuthenticationWithProofDataCommand( - authenticated.id, - request.proofDataUploadUrl() - )); - return ResponseEntity.noContent().build(); - } -} diff --git a/src/main/java/com/koddy/server/member/presentation/AuthenticationMentorUnivApi.kt b/src/main/java/com/koddy/server/member/presentation/AuthenticationMentorUnivApi.kt new file mode 100644 index 00000000..3c464eb5 --- /dev/null +++ b/src/main/java/com/koddy/server/member/presentation/AuthenticationMentorUnivApi.kt @@ -0,0 +1,82 @@ +package com.koddy.server.member.presentation + +import com.koddy.server.auth.domain.model.Authenticated +import com.koddy.server.global.annotation.Auth +import com.koddy.server.global.aop.AccessControl +import com.koddy.server.global.aop.DailyMailAuthLimit +import com.koddy.server.global.utils.UniversityInfo +import com.koddy.server.member.application.usecase.AuthenticationMentorUnivUseCase +import com.koddy.server.member.application.usecase.command.AuthenticationConfirmWithMailCommand +import com.koddy.server.member.application.usecase.command.AuthenticationWithMailCommand +import com.koddy.server.member.application.usecase.command.AuthenticationWithProofDataCommand +import com.koddy.server.member.domain.model.Role +import com.koddy.server.member.presentation.request.AuthenticationConfirmWithMailRequest +import com.koddy.server.member.presentation.request.AuthenticationWithMailRequest +import com.koddy.server.member.presentation.request.AuthenticationWithProofDataRequest +import io.swagger.v3.oas.annotations.Operation +import io.swagger.v3.oas.annotations.tags.Tag +import jakarta.validation.Valid +import org.springframework.http.ResponseEntity +import org.springframework.web.bind.annotation.PostMapping +import org.springframework.web.bind.annotation.RequestBody +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RestController + +@Tag(name = "2-5. 멘토 학교 인증 API") +@RestController +@RequestMapping("/api/mentors/me/univ") +class AuthenticationMentorUnivApi( + private val authenticationMentorUnivUseCase: AuthenticationMentorUnivUseCase, +) { + @Operation(summary = "메일 인증 시도 Endpoint") + @PostMapping("/mail") + @AccessControl(role = Role.MENTOR) + @DailyMailAuthLimit + fun authWithMail( + @Auth authenticated: Authenticated, + @RequestBody @Valid request: AuthenticationWithMailRequest, + ): ResponseEntity { + UniversityInfo.validateDomain(authenticated, request.schoolMail) + authenticationMentorUnivUseCase.authWithMail( + AuthenticationWithMailCommand( + authenticated.id, + request.schoolMail, + ), + ) + return ResponseEntity.noContent().build() + } + + @Operation(summary = "메일 인증 확인 Endpoint") + @PostMapping("/mail/confirm") + @AccessControl(role = Role.MENTOR) + fun confirmMailAuthCode( + @Auth authenticated: Authenticated, + @RequestBody @Valid request: AuthenticationConfirmWithMailRequest, + ): ResponseEntity { + UniversityInfo.validateDomain(authenticated, request.schoolMail) + authenticationMentorUnivUseCase.confirmMailAuthCode( + AuthenticationConfirmWithMailCommand( + authenticated.id, + request.schoolMail, + request.authCode, + ), + ) + return ResponseEntity.noContent().build() + } + + @Operation(summary = "증명자료 인증 시도 Endpoint") + @PostMapping("/proof-data") + @AccessControl(role = Role.MENTOR) + fun authWithProofData( + @Auth authenticated: Authenticated, + @RequestBody @Valid request: AuthenticationWithProofDataRequest, + ): ResponseEntity { + authenticationMentorUnivUseCase.authWithProofData( + AuthenticationWithProofDataCommand( + authenticated.id, + request.proofDataUploadUrl, + ), + ) + return ResponseEntity.noContent().build() + } +} diff --git a/src/main/java/com/koddy/server/member/presentation/request/AuthenticationConfirmWithMailRequest.java b/src/main/java/com/koddy/server/member/presentation/request/AuthenticationConfirmWithMailRequest.java deleted file mode 100644 index edbe1185..00000000 --- a/src/main/java/com/koddy/server/member/presentation/request/AuthenticationConfirmWithMailRequest.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.koddy.server.member.presentation.request; - -import jakarta.validation.constraints.NotBlank; - -public record AuthenticationConfirmWithMailRequest( - @NotBlank(message = "인증을 진행할 학교 메일은 필수입니다.") - String schoolMail, - - @NotBlank(message = "인증 번호는 필수입니다.") - String authCode -) { -} diff --git a/src/main/java/com/koddy/server/member/presentation/request/AuthenticationConfirmWithMailRequest.kt b/src/main/java/com/koddy/server/member/presentation/request/AuthenticationConfirmWithMailRequest.kt new file mode 100644 index 00000000..0bb9eab3 --- /dev/null +++ b/src/main/java/com/koddy/server/member/presentation/request/AuthenticationConfirmWithMailRequest.kt @@ -0,0 +1,11 @@ +package com.koddy.server.member.presentation.request + +import jakarta.validation.constraints.NotBlank + +data class AuthenticationConfirmWithMailRequest( + @field:NotBlank(message = "인증을 진행할 학교 메일은 필수입니다.") + val schoolMail: String, + + @field:NotBlank(message = "인증 번호는 필수입니다.") + val authCode: String, +) diff --git a/src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithMailRequest.java b/src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithMailRequest.java deleted file mode 100644 index 67844e3e..00000000 --- a/src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithMailRequest.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.koddy.server.member.presentation.request; - -import jakarta.validation.constraints.NotBlank; - -public record AuthenticationWithMailRequest( - @NotBlank(message = "인증을 진행할 학교 메일은 필수입니다.") - String schoolMail -) { -} diff --git a/src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithMailRequest.kt b/src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithMailRequest.kt new file mode 100644 index 00000000..75084c38 --- /dev/null +++ b/src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithMailRequest.kt @@ -0,0 +1,8 @@ +package com.koddy.server.member.presentation.request + +import jakarta.validation.constraints.NotBlank + +data class AuthenticationWithMailRequest( + @field:NotBlank(message = "인증을 진행할 학교 메일은 필수입니다.") + val schoolMail: String, +) diff --git a/src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithProofDataRequest.java b/src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithProofDataRequest.java deleted file mode 100644 index f37fd726..00000000 --- a/src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithProofDataRequest.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.koddy.server.member.presentation.request; - -import jakarta.validation.constraints.NotBlank; - -public record AuthenticationWithProofDataRequest( - @NotBlank(message = "증명자료 업로드 URL은 필수입니다.") - String proofDataUploadUrl -) { -} diff --git a/src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithProofDataRequest.kt b/src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithProofDataRequest.kt new file mode 100644 index 00000000..a67fd882 --- /dev/null +++ b/src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithProofDataRequest.kt @@ -0,0 +1,8 @@ +package com.koddy.server.member.presentation.request + +import jakarta.validation.constraints.NotBlank + +data class AuthenticationWithProofDataRequest( + @field:NotBlank(message = "증명자료 업로드 URL은 필수입니다.") + val proofDataUploadUrl: String, +) From b420666389c7425bd372c99de545f2c3ea82e734 Mon Sep 17 00:00:00 2001 From: sjiwon Date: Mon, 26 Feb 2024 21:52:09 +0900 Subject: [PATCH 4/9] =?UTF-8?q?refactor:=20MemberBasicProfileQueryApi,=20M?= =?UTF-8?q?emberPrivateProfileQueryApi=20Kotlin=20=EC=A0=84=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MemberBasicProfileQueryApi.kt | 37 ++++++++++++ .../MemberBasicProflieQueryApi.java | 41 ------------- .../MemberPrivateProfileQueryApi.kt | 55 +++++++++++++++++ .../MemberPrivateProflieQueryApi.java | 60 ------------------- ...va => MemberBasicProfileQueryApiTest.java} | 4 +- ... => MemberPrivateProfileQueryApiTest.java} | 4 +- 6 files changed, 96 insertions(+), 105 deletions(-) create mode 100644 src/main/java/com/koddy/server/member/presentation/MemberBasicProfileQueryApi.kt delete mode 100644 src/main/java/com/koddy/server/member/presentation/MemberBasicProflieQueryApi.java create mode 100644 src/main/java/com/koddy/server/member/presentation/MemberPrivateProfileQueryApi.kt delete mode 100644 src/main/java/com/koddy/server/member/presentation/MemberPrivateProflieQueryApi.java rename src/test/java/com/koddy/server/member/presentation/{MemberBasicProflieQueryApiTest.java => MemberBasicProfileQueryApiTest.java} (97%) rename src/test/java/com/koddy/server/member/presentation/{MemberPrivateProflieQueryApiTest.java => MemberPrivateProfileQueryApiTest.java} (98%) diff --git a/src/main/java/com/koddy/server/member/presentation/MemberBasicProfileQueryApi.kt b/src/main/java/com/koddy/server/member/presentation/MemberBasicProfileQueryApi.kt new file mode 100644 index 00000000..78acc25b --- /dev/null +++ b/src/main/java/com/koddy/server/member/presentation/MemberBasicProfileQueryApi.kt @@ -0,0 +1,37 @@ +package com.koddy.server.member.presentation + +import com.koddy.server.member.application.usecase.GetMemberBasicProfileUseCase +import com.koddy.server.member.application.usecase.query.response.MenteeBasicProfile +import com.koddy.server.member.application.usecase.query.response.MentorBasicProfile +import io.swagger.v3.oas.annotations.Operation +import io.swagger.v3.oas.annotations.tags.Tag +import org.springframework.http.ResponseEntity +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.PathVariable +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RestController + +@Tag(name = "2-8. 사용자 기본(Public) 프로필 조회 API") +@RestController +@RequestMapping("/api") +class MemberBasicProfileQueryApi( + private val getMemberBasicProfileUseCase: GetMemberBasicProfileUseCase, +) { + @Operation(summary = "멘토 기본 프로필 조회 Endpoint") + @GetMapping("/mentors/{mentorId}") + fun getMentorProfile( + @PathVariable mentorId: Long, + ): ResponseEntity { + val response = getMemberBasicProfileUseCase.getMentorProfile(mentorId) + return ResponseEntity.ok(response) + } + + @Operation(summary = "멘티 기본 프로필 조회 Endpoint") + @GetMapping("/mentees/{menteeId}") + fun getMenteeProfile( + @PathVariable menteeId: Long, + ): ResponseEntity { + val response = getMemberBasicProfileUseCase.getMenteeProfile(menteeId) + return ResponseEntity.ok(response) + } +} diff --git a/src/main/java/com/koddy/server/member/presentation/MemberBasicProflieQueryApi.java b/src/main/java/com/koddy/server/member/presentation/MemberBasicProflieQueryApi.java deleted file mode 100644 index af1dd7f5..00000000 --- a/src/main/java/com/koddy/server/member/presentation/MemberBasicProflieQueryApi.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.koddy.server.member.presentation; - -import com.koddy.server.member.application.usecase.GetMemberBasicProfileUseCase; -import com.koddy.server.member.application.usecase.query.response.MenteeBasicProfile; -import com.koddy.server.member.application.usecase.query.response.MentorBasicProfile; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@Tag(name = "2-8. 사용자 기본(Public) 프로필 조회 API") -@RestController -@RequestMapping("/api") -public class MemberBasicProflieQueryApi { - private final GetMemberBasicProfileUseCase getMemberBasicProfileUseCase; - - public MemberBasicProflieQueryApi(final GetMemberBasicProfileUseCase getMemberBasicProfileUseCase) { - this.getMemberBasicProfileUseCase = getMemberBasicProfileUseCase; - } - - @Operation(summary = "멘토 기본 프로필 조회 Endpoint") - @GetMapping("/mentors/{mentorId}") - public ResponseEntity getMentorProfile( - @PathVariable final Long mentorId - ) { - final MentorBasicProfile response = getMemberBasicProfileUseCase.getMentorProfile(mentorId); - return ResponseEntity.ok(response); - } - - @Operation(summary = "멘티 기본 프로필 조회 Endpoint") - @GetMapping("/mentees/{menteeId}") - public ResponseEntity getMenteeProfile( - @PathVariable final Long menteeId - ) { - final MenteeBasicProfile response = getMemberBasicProfileUseCase.getMenteeProfile(menteeId); - return ResponseEntity.ok(response); - } -} diff --git a/src/main/java/com/koddy/server/member/presentation/MemberPrivateProfileQueryApi.kt b/src/main/java/com/koddy/server/member/presentation/MemberPrivateProfileQueryApi.kt new file mode 100644 index 00000000..24c5192b --- /dev/null +++ b/src/main/java/com/koddy/server/member/presentation/MemberPrivateProfileQueryApi.kt @@ -0,0 +1,55 @@ +package com.koddy.server.member.presentation + +import com.koddy.server.auth.domain.model.Authenticated +import com.koddy.server.global.annotation.Auth +import com.koddy.server.global.aop.AccessControl +import com.koddy.server.member.application.usecase.GetMemberPrivateProfileUseCase +import com.koddy.server.member.application.usecase.query.response.MemberPrivateProfile +import com.koddy.server.member.application.usecase.query.response.MenteePrivateProfile +import com.koddy.server.member.application.usecase.query.response.MentorPrivateProfile +import com.koddy.server.member.domain.model.Role +import io.swagger.v3.oas.annotations.Operation +import io.swagger.v3.oas.annotations.tags.Tag +import org.springframework.http.ResponseEntity +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RestController + +@Tag(name = "2-7. 사용자 마이페이지(Private) 프로필 조회 API") +@RestController +@RequestMapping("/api") +class MemberPrivateProfileQueryApi( + private val getMemberPrivateProfileUseCase: GetMemberPrivateProfileUseCase, +) { + @Operation(summary = "마이페이지 프로필 조회 Endpoint (@Auth Authorities에 따른 분기)") + @GetMapping("/members/me") + fun getProfile( + @Auth authenticated: Authenticated, + ): ResponseEntity { + val response: MemberPrivateProfile = when (authenticated.isMentor) { + true -> getMemberPrivateProfileUseCase.getMentorProfile(authenticated.id) + false -> getMemberPrivateProfileUseCase.getMenteeProfile(authenticated.id) + } + return ResponseEntity.ok(response) + } + + @Operation(summary = "멘토 마이페이지 프로필 조회 Endpoint - Deprecated by requirements") + @GetMapping("/mentors/me") + @AccessControl(role = Role.MENTOR) + fun getMentorProfile( + @Auth authenticated: Authenticated, + ): ResponseEntity { + val response: MentorPrivateProfile = getMemberPrivateProfileUseCase.getMentorProfile(authenticated.id) + return ResponseEntity.ok(response) + } + + @Operation(summary = "멘티 마이페이지 프로필 조회 Endpoint - Deprecated by requirements") + @GetMapping("/mentees/me") + @AccessControl(role = Role.MENTEE) + fun getMenteeProfile( + @Auth authenticated: Authenticated, + ): ResponseEntity { + val response: MenteePrivateProfile = getMemberPrivateProfileUseCase.getMenteeProfile(authenticated.id) + return ResponseEntity.ok(response) + } +} diff --git a/src/main/java/com/koddy/server/member/presentation/MemberPrivateProflieQueryApi.java b/src/main/java/com/koddy/server/member/presentation/MemberPrivateProflieQueryApi.java deleted file mode 100644 index 7fe6520d..00000000 --- a/src/main/java/com/koddy/server/member/presentation/MemberPrivateProflieQueryApi.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.koddy.server.member.presentation; - -import com.koddy.server.auth.domain.model.Authenticated; -import com.koddy.server.global.annotation.Auth; -import com.koddy.server.global.aop.AccessControl; -import com.koddy.server.member.application.usecase.GetMemberPrivateProfileUseCase; -import com.koddy.server.member.application.usecase.query.response.MemberPrivateProfile; -import com.koddy.server.member.application.usecase.query.response.MenteePrivateProfile; -import com.koddy.server.member.application.usecase.query.response.MentorPrivateProfile; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import static com.koddy.server.member.domain.model.Role.MENTEE; -import static com.koddy.server.member.domain.model.Role.MENTOR; - -@Tag(name = "2-7. 사용자 마이페이지(Private) 프로필 조회 API") -@RestController -@RequestMapping("/api") -public class MemberPrivateProflieQueryApi { - private final GetMemberPrivateProfileUseCase getMemberPrivateProfileUseCase; - - public MemberPrivateProflieQueryApi(final GetMemberPrivateProfileUseCase getMemberPrivateProfileUseCase) { - this.getMemberPrivateProfileUseCase = getMemberPrivateProfileUseCase; - } - - @Operation(summary = "마이페이지 프로필 조회 Endpoint (@Auth Authorities에 따른 분기)") - @GetMapping("/members/me") - public ResponseEntity getProfile( - @Auth final Authenticated authenticated - ) { - final MemberPrivateProfile response = authenticated.isMentor() - ? getMemberPrivateProfileUseCase.getMentorProfile(authenticated.id) - : getMemberPrivateProfileUseCase.getMenteeProfile(authenticated.id); - return ResponseEntity.ok(response); - } - - @Operation(summary = "멘토 마이페이지 프로필 조회 Endpoint - Deprecated by requirements") - @GetMapping("/mentors/me") - @AccessControl(role = MENTOR) - public ResponseEntity getMentorProfile( - @Auth final Authenticated authenticated - ) { - final MentorPrivateProfile response = getMemberPrivateProfileUseCase.getMentorProfile(authenticated.id); - return ResponseEntity.ok(response); - } - - @Operation(summary = "멘티 마이페이지 프로필 조회 Endpoint - Deprecated by requirements") - @GetMapping("/mentees/me") - @AccessControl(role = MENTEE) - public ResponseEntity getMenteeProfile( - @Auth final Authenticated authenticated - ) { - final MenteePrivateProfile response = getMemberPrivateProfileUseCase.getMenteeProfile(authenticated.id); - return ResponseEntity.ok(response); - } -} diff --git a/src/test/java/com/koddy/server/member/presentation/MemberBasicProflieQueryApiTest.java b/src/test/java/com/koddy/server/member/presentation/MemberBasicProfileQueryApiTest.java similarity index 97% rename from src/test/java/com/koddy/server/member/presentation/MemberBasicProflieQueryApiTest.java rename to src/test/java/com/koddy/server/member/presentation/MemberBasicProfileQueryApiTest.java index d7ea5388..a8f5a24f 100644 --- a/src/test/java/com/koddy/server/member/presentation/MemberBasicProflieQueryApiTest.java +++ b/src/test/java/com/koddy/server/member/presentation/MemberBasicProfileQueryApiTest.java @@ -22,8 +22,8 @@ import static org.springframework.restdocs.request.RequestDocumentation.pathParameters; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; -@DisplayName("Member -> MemberBasicProflieQueryApi 테스트") -class MemberBasicProflieQueryApiTest extends ControllerTest { +@DisplayName("Member -> MemberBasicProfileQueryApi 테스트") +class MemberBasicProfileQueryApiTest extends ControllerTest { @Autowired private GetMemberBasicProfileUseCase getMemberBasicProfileUseCase; diff --git a/src/test/java/com/koddy/server/member/presentation/MemberPrivateProflieQueryApiTest.java b/src/test/java/com/koddy/server/member/presentation/MemberPrivateProfileQueryApiTest.java similarity index 98% rename from src/test/java/com/koddy/server/member/presentation/MemberPrivateProflieQueryApiTest.java rename to src/test/java/com/koddy/server/member/presentation/MemberPrivateProfileQueryApiTest.java index a456b230..7d6d11a5 100644 --- a/src/test/java/com/koddy/server/member/presentation/MemberPrivateProflieQueryApiTest.java +++ b/src/test/java/com/koddy/server/member/presentation/MemberPrivateProfileQueryApiTest.java @@ -22,8 +22,8 @@ import static org.springframework.restdocs.payload.PayloadDocumentation.responseFields; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; -@DisplayName("Member -> MemberPrivateProflieQueryApi 테스트") -class MemberPrivateProflieQueryApiTest extends ControllerTest { +@DisplayName("Member -> MemberPrivateProfileQueryApi 테스트") +class MemberPrivateProfileQueryApiTest extends ControllerTest { @Autowired private GetMemberPrivateProfileUseCase getMemberPrivateProfileUseCase; From f6f66297a33ac3a7e794dfbf0cd8b39d51d5679d Mon Sep 17 00:00:00 2001 From: sjiwon Date: Mon, 26 Feb 2024 21:57:19 +0900 Subject: [PATCH 5/9] =?UTF-8?q?refactor:=20MentorReservedScheduleQueryApi?= =?UTF-8?q?=20Kotlin=20=EC=A0=84=ED=99=98,=20=EB=A9=98=ED=86=A0=20?= =?UTF-8?q?=EC=98=88=EC=95=BD=EB=90=9C=20=EC=8A=A4=EC=BC=80=EC=A4=84=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EB=84=A4?= =?UTF-8?q?=EC=9D=B4=EB=B0=8D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ... => GetMentorReservedScheduleUseCase.java} | 12 +++--- ...le.java => GetMentorReservedSchedule.java} | 2 +- ...edule.java => MentorReservedSchedule.java} | 8 ++-- .../MentorReservedScheduleQueryApi.kt | 41 ++++++++++++++++++ .../presentation/MentorScheduleQueryApi.java | 43 ------------------- .../GetMentorReservedScheduleRequest.kt | 11 +++++ .../request/ReservedScheduleRequest.java | 12 ------ .../MentorScheduleQueryAcceptanceTest.java | 2 +- ...GetMentorReservedScheduleUseCaseTest.java} | 18 ++++---- ...> MentorReservedScheduleQueryApiTest.java} | 24 +++++------ 10 files changed, 85 insertions(+), 88 deletions(-) rename src/main/java/com/koddy/server/member/application/usecase/{GetReservedScheduleUseCase.java => GetMentorReservedScheduleUseCase.java} (79%) rename src/main/java/com/koddy/server/member/application/usecase/query/{GetReservedSchedule.java => GetMentorReservedSchedule.java} (75%) rename src/main/java/com/koddy/server/member/application/usecase/query/response/{ReservedSchedule.java => MentorReservedSchedule.java} (81%) create mode 100644 src/main/java/com/koddy/server/member/presentation/MentorReservedScheduleQueryApi.kt delete mode 100644 src/main/java/com/koddy/server/member/presentation/MentorScheduleQueryApi.java create mode 100644 src/main/java/com/koddy/server/member/presentation/request/GetMentorReservedScheduleRequest.kt delete mode 100644 src/main/java/com/koddy/server/member/presentation/request/ReservedScheduleRequest.java rename src/test/java/com/koddy/server/member/application/usecase/{GetReservedScheduleUseCaseTest.java => GetMentorReservedScheduleUseCaseTest.java} (85%) rename src/test/java/com/koddy/server/member/presentation/{MentorScheduleQueryApiTest.java => MentorReservedScheduleQueryApiTest.java} (89%) diff --git a/src/main/java/com/koddy/server/member/application/usecase/GetReservedScheduleUseCase.java b/src/main/java/com/koddy/server/member/application/usecase/GetMentorReservedScheduleUseCase.java similarity index 79% rename from src/main/java/com/koddy/server/member/application/usecase/GetReservedScheduleUseCase.java rename to src/main/java/com/koddy/server/member/application/usecase/GetMentorReservedScheduleUseCase.java index a703d3b5..3b2c610c 100644 --- a/src/main/java/com/koddy/server/member/application/usecase/GetReservedScheduleUseCase.java +++ b/src/main/java/com/koddy/server/member/application/usecase/GetMentorReservedScheduleUseCase.java @@ -4,19 +4,19 @@ import com.koddy.server.coffeechat.domain.repository.query.MentorReservedScheduleQueryRepository; import com.koddy.server.global.annotation.KoddyReadOnlyTransactional; import com.koddy.server.global.annotation.UseCase; -import com.koddy.server.member.application.usecase.query.GetReservedSchedule; -import com.koddy.server.member.application.usecase.query.response.ReservedSchedule; +import com.koddy.server.member.application.usecase.query.GetMentorReservedSchedule; +import com.koddy.server.member.application.usecase.query.response.MentorReservedSchedule; import com.koddy.server.member.domain.model.mentor.Mentor; import com.koddy.server.member.domain.repository.MentorRepository; import java.util.List; @UseCase -public class GetReservedScheduleUseCase { +public class GetMentorReservedScheduleUseCase { private final MentorRepository mentorRepository; private final MentorReservedScheduleQueryRepository mentorReservedScheduleQueryRepository; - public GetReservedScheduleUseCase( + public GetMentorReservedScheduleUseCase( final MentorRepository mentorRepository, final MentorReservedScheduleQueryRepository mentorReservedScheduleQueryRepository ) { @@ -25,13 +25,13 @@ public GetReservedScheduleUseCase( } @KoddyReadOnlyTransactional - public ReservedSchedule invoke(final GetReservedSchedule query) { + public MentorReservedSchedule invoke(final GetMentorReservedSchedule query) { final Mentor mentor = mentorRepository.getByIdWithSchedules(query.mentorId()); final List reservedCoffeeChat = mentorReservedScheduleQueryRepository.fetchReservedCoffeeChat( query.mentorId(), query.year(), query.month() ); - return ReservedSchedule.of(mentor, reservedCoffeeChat); + return MentorReservedSchedule.of(mentor, reservedCoffeeChat); } } diff --git a/src/main/java/com/koddy/server/member/application/usecase/query/GetReservedSchedule.java b/src/main/java/com/koddy/server/member/application/usecase/query/GetMentorReservedSchedule.java similarity index 75% rename from src/main/java/com/koddy/server/member/application/usecase/query/GetReservedSchedule.java rename to src/main/java/com/koddy/server/member/application/usecase/query/GetMentorReservedSchedule.java index 1eca5445..0824d029 100644 --- a/src/main/java/com/koddy/server/member/application/usecase/query/GetReservedSchedule.java +++ b/src/main/java/com/koddy/server/member/application/usecase/query/GetMentorReservedSchedule.java @@ -1,6 +1,6 @@ package com.koddy.server.member.application.usecase.query; -public record GetReservedSchedule( +public record GetMentorReservedSchedule( long mentorId, int year, int month diff --git a/src/main/java/com/koddy/server/member/application/usecase/query/response/ReservedSchedule.java b/src/main/java/com/koddy/server/member/application/usecase/query/response/MentorReservedSchedule.java similarity index 81% rename from src/main/java/com/koddy/server/member/application/usecase/query/response/ReservedSchedule.java rename to src/main/java/com/koddy/server/member/application/usecase/query/response/MentorReservedSchedule.java index 8d41a7cf..f8b182be 100644 --- a/src/main/java/com/koddy/server/member/application/usecase/query/response/ReservedSchedule.java +++ b/src/main/java/com/koddy/server/member/application/usecase/query/response/MentorReservedSchedule.java @@ -9,7 +9,7 @@ import java.time.LocalDateTime; import java.util.List; -public record ReservedSchedule( +public record MentorReservedSchedule( MentoringPeriodResponse period, List schedules, Integer timeUnit, @@ -24,8 +24,8 @@ public static Reserved from(final Reservation reservation) { } } - public static ReservedSchedule of(final Mentor mentor, final List reservedCoffeeChat) { - return new ReservedSchedule( + public static MentorReservedSchedule of(final Mentor mentor, final List reservedCoffeeChat) { + return new MentorReservedSchedule( MentoringPeriodResponse.from(mentor.getMentoringPeriod()), mentor.getSchedules() .stream() @@ -33,7 +33,7 @@ public static ReservedSchedule of(final Mentor mentor, final List re .toList(), mentor.getMentoringTimeUnit(), reservedCoffeeChat.stream() - .map(it -> ReservedSchedule.Reserved.from(it.getReservation())) + .map(it -> MentorReservedSchedule.Reserved.from(it.getReservation())) .toList() ); } diff --git a/src/main/java/com/koddy/server/member/presentation/MentorReservedScheduleQueryApi.kt b/src/main/java/com/koddy/server/member/presentation/MentorReservedScheduleQueryApi.kt new file mode 100644 index 00000000..0e58c208 --- /dev/null +++ b/src/main/java/com/koddy/server/member/presentation/MentorReservedScheduleQueryApi.kt @@ -0,0 +1,41 @@ +package com.koddy.server.member.presentation + +import com.koddy.server.auth.domain.model.Authenticated +import com.koddy.server.global.annotation.Auth +import com.koddy.server.member.application.usecase.GetMentorReservedScheduleUseCase +import com.koddy.server.member.application.usecase.query.GetMentorReservedSchedule +import com.koddy.server.member.application.usecase.query.response.MentorReservedSchedule +import com.koddy.server.member.presentation.request.GetMentorReservedScheduleRequest +import io.swagger.v3.oas.annotations.Operation +import io.swagger.v3.oas.annotations.tags.Tag +import jakarta.validation.Valid +import org.springframework.http.ResponseEntity +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.ModelAttribute +import org.springframework.web.bind.annotation.PathVariable +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RestController + +@Tag(name = "2-6. 멘토 스케줄 조회 API") +@RestController +@RequestMapping("/api/mentors/{mentorId}/reserved-schedule") +class MentorReservedScheduleQueryApi( + private val getMentorReservedScheduleUseCase: GetMentorReservedScheduleUseCase, +) { + @Operation(summary = "특정 Year-Month에 대해서 멘토의 예약된 스케줄 조회 Endpoint") + @GetMapping + fun getMentorReservedSchedule( + @Auth authenticated: Authenticated, + @PathVariable mentorId: Long, + @ModelAttribute @Valid request: GetMentorReservedScheduleRequest, + ): ResponseEntity { + val result = getMentorReservedScheduleUseCase.invoke( + GetMentorReservedSchedule( + mentorId, + request.year, + request.month, + ), + ) + return ResponseEntity.ok(result) + } +} diff --git a/src/main/java/com/koddy/server/member/presentation/MentorScheduleQueryApi.java b/src/main/java/com/koddy/server/member/presentation/MentorScheduleQueryApi.java deleted file mode 100644 index 63831acc..00000000 --- a/src/main/java/com/koddy/server/member/presentation/MentorScheduleQueryApi.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.koddy.server.member.presentation; - -import com.koddy.server.auth.domain.model.Authenticated; -import com.koddy.server.global.annotation.Auth; -import com.koddy.server.member.application.usecase.GetReservedScheduleUseCase; -import com.koddy.server.member.application.usecase.query.GetReservedSchedule; -import com.koddy.server.member.application.usecase.query.response.ReservedSchedule; -import com.koddy.server.member.presentation.request.ReservedScheduleRequest; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.validation.Valid; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@Tag(name = "2-6. 멘토 스케줄 조회 API") -@RestController -@RequestMapping("/api/mentors/{mentorId}/reserved-schedule") -public class MentorScheduleQueryApi { - private final GetReservedScheduleUseCase getReservedScheduleUseCase; - - public MentorScheduleQueryApi(final GetReservedScheduleUseCase getReservedScheduleUseCase) { - this.getReservedScheduleUseCase = getReservedScheduleUseCase; - } - - @Operation(summary = "특정 Year-Month에 대해서 멘토의 예약된 스케줄 조회 Endpoint") - @GetMapping - public ResponseEntity getReservedSchedule( - @Auth final Authenticated authenticated, - @PathVariable final Long mentorId, - @ModelAttribute @Valid final ReservedScheduleRequest request - ) { - final ReservedSchedule result = getReservedScheduleUseCase.invoke(new GetReservedSchedule( - mentorId, - request.year(), - request.month() - )); - return ResponseEntity.ok(result); - } -} diff --git a/src/main/java/com/koddy/server/member/presentation/request/GetMentorReservedScheduleRequest.kt b/src/main/java/com/koddy/server/member/presentation/request/GetMentorReservedScheduleRequest.kt new file mode 100644 index 00000000..f4bb737d --- /dev/null +++ b/src/main/java/com/koddy/server/member/presentation/request/GetMentorReservedScheduleRequest.kt @@ -0,0 +1,11 @@ +package com.koddy.server.member.presentation.request + +import jakarta.validation.constraints.NotNull + +data class GetMentorReservedScheduleRequest( + @NotNull(message = "Year 정보는 필수입니다.") + val year: Int, + + @NotNull(message = "Month 정보는 필수입니다.") + val month: Int, +) diff --git a/src/main/java/com/koddy/server/member/presentation/request/ReservedScheduleRequest.java b/src/main/java/com/koddy/server/member/presentation/request/ReservedScheduleRequest.java deleted file mode 100644 index 9279549f..00000000 --- a/src/main/java/com/koddy/server/member/presentation/request/ReservedScheduleRequest.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.koddy.server.member.presentation.request; - -import jakarta.validation.constraints.NotNull; - -public record ReservedScheduleRequest( - @NotNull(message = "Year 정보는 필수입니다.") - Integer year, - - @NotNull(message = "Month 정보는 필수입니다.") - Integer month -) { -} diff --git a/src/test/java/com/koddy/server/acceptance/member/MentorScheduleQueryAcceptanceTest.java b/src/test/java/com/koddy/server/acceptance/member/MentorScheduleQueryAcceptanceTest.java index 1052f14a..e183cf7f 100644 --- a/src/test/java/com/koddy/server/acceptance/member/MentorScheduleQueryAcceptanceTest.java +++ b/src/test/java/com/koddy/server/acceptance/member/MentorScheduleQueryAcceptanceTest.java @@ -46,7 +46,7 @@ public class MentorScheduleQueryAcceptanceTest extends AcceptanceTest { @Nested @DisplayName("특정 Year-Month에 대해서 멘토의 예약된 스케줄 정보를 조회한다") - class GetReservedSchedule { + class GetMentorReservedSchedule { @Test @DisplayName("멘토링 시간 정보를 기입하지 않은 멘토에 대한 조회") void successA() { diff --git a/src/test/java/com/koddy/server/member/application/usecase/GetReservedScheduleUseCaseTest.java b/src/test/java/com/koddy/server/member/application/usecase/GetMentorReservedScheduleUseCaseTest.java similarity index 85% rename from src/test/java/com/koddy/server/member/application/usecase/GetReservedScheduleUseCaseTest.java rename to src/test/java/com/koddy/server/member/application/usecase/GetMentorReservedScheduleUseCaseTest.java index 2feefd21..ce70f2dc 100644 --- a/src/test/java/com/koddy/server/member/application/usecase/GetReservedScheduleUseCaseTest.java +++ b/src/test/java/com/koddy/server/member/application/usecase/GetMentorReservedScheduleUseCaseTest.java @@ -4,8 +4,8 @@ import com.koddy.server.coffeechat.domain.repository.query.MentorReservedScheduleQueryRepository; import com.koddy.server.common.UnitTest; import com.koddy.server.common.fixture.CoffeeChatFixture.MentorFlow; -import com.koddy.server.member.application.usecase.query.GetReservedSchedule; -import com.koddy.server.member.application.usecase.query.response.ReservedSchedule; +import com.koddy.server.member.application.usecase.query.GetMentorReservedSchedule; +import com.koddy.server.member.application.usecase.query.response.MentorReservedSchedule; import com.koddy.server.member.domain.model.mentee.Mentee; import com.koddy.server.member.domain.model.mentor.Mentor; import com.koddy.server.member.domain.model.response.ScheduleResponse; @@ -27,11 +27,11 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -@DisplayName("Member -> GetReservedScheduleUseCase 테스트") -class GetReservedScheduleUseCaseTest extends UnitTest { +@DisplayName("Member -> GetMentorReservedScheduleUseCase 테스트") +class GetMentorReservedScheduleUseCaseTest extends UnitTest { private final MentorRepository mentorRepository = mock(MentorRepository.class); private final MentorReservedScheduleQueryRepository mentorReservedScheduleQueryRepository = mock(MentorReservedScheduleQueryRepository.class); - private final GetReservedScheduleUseCase sut = new GetReservedScheduleUseCase(mentorRepository, mentorReservedScheduleQueryRepository); + private final GetMentorReservedScheduleUseCase sut = new GetMentorReservedScheduleUseCase(mentorRepository, mentorReservedScheduleQueryRepository); private final Mentor mentor = MENTOR_1.toDomain().apply(1L); private final Mentee menteeA = MENTEE_1.toDomain().apply(2L); @@ -42,7 +42,7 @@ class GetReservedScheduleUseCaseTest extends UnitTest { @DisplayName("특정 Year-Month에 대해서 멘토의 예약된 스케줄 정보를 조회한다") void success() { // given - final GetReservedSchedule query = new GetReservedSchedule(mentor.getId(), 2024, 2); + final GetMentorReservedSchedule query = new GetMentorReservedSchedule(mentor.getId(), 2024, 2); given(mentorRepository.getByIdWithSchedules(query.mentorId())).willReturn(mentor); final LocalDateTime startB = LocalDateTime.of(2024, 2, 18, 18, 0); @@ -54,7 +54,7 @@ void success() { given(mentorReservedScheduleQueryRepository.fetchReservedCoffeeChat(query.mentorId(), query.year(), query.month())).willReturn(List.of(coffeeChatC, coffeeChatB)); // when - final ReservedSchedule result = sut.invoke(query); + final MentorReservedSchedule result = sut.invoke(query); // then assertAll( @@ -70,10 +70,10 @@ void success() { ), () -> assertThat(result.timeUnit()).isEqualTo(mentor.getMentoringTimeUnit()), () -> assertThat(result.reserved()) - .map(ReservedSchedule.Reserved::start) + .map(MentorReservedSchedule.Reserved::start) .containsExactly(coffeeChatC.getReservation().getStart(), coffeeChatB.getReservation().getStart()), () -> assertThat(result.reserved()) - .map(ReservedSchedule.Reserved::end) + .map(MentorReservedSchedule.Reserved::end) .containsExactly(coffeeChatC.getReservation().getEnd(), coffeeChatB.getReservation().getEnd()) ); } diff --git a/src/test/java/com/koddy/server/member/presentation/MentorScheduleQueryApiTest.java b/src/test/java/com/koddy/server/member/presentation/MentorReservedScheduleQueryApiTest.java similarity index 89% rename from src/test/java/com/koddy/server/member/presentation/MentorScheduleQueryApiTest.java rename to src/test/java/com/koddy/server/member/presentation/MentorReservedScheduleQueryApiTest.java index 602e4728..1d5aedb0 100644 --- a/src/test/java/com/koddy/server/member/presentation/MentorScheduleQueryApiTest.java +++ b/src/test/java/com/koddy/server/member/presentation/MentorReservedScheduleQueryApiTest.java @@ -1,8 +1,8 @@ package com.koddy.server.member.presentation; import com.koddy.server.common.ControllerTest; -import com.koddy.server.member.application.usecase.GetReservedScheduleUseCase; -import com.koddy.server.member.application.usecase.query.response.ReservedSchedule; +import com.koddy.server.member.application.usecase.GetMentorReservedScheduleUseCase; +import com.koddy.server.member.application.usecase.query.response.MentorReservedSchedule; import com.koddy.server.member.domain.model.mentee.Mentee; import com.koddy.server.member.domain.model.mentor.Mentor; import com.koddy.server.member.domain.model.mentor.MentoringPeriod; @@ -32,17 +32,17 @@ import static org.springframework.restdocs.request.RequestDocumentation.queryParameters; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; -@DisplayName("Member -> MentorScheduleQueryApi 테스트") -class MentorScheduleQueryApiTest extends ControllerTest { +@DisplayName("Member -> MentorReservedScheduleQueryApi 테스트") +class MentorReservedScheduleQueryApiTest extends ControllerTest { @Autowired - private GetReservedScheduleUseCase getReservedScheduleUseCase; + private GetMentorReservedScheduleUseCase getMentorReservedScheduleUseCase; private final Mentor mentor = MENTOR_1.toDomain().apply(1L); private final Mentee mentee = MENTEE_1.toDomain().apply(2L); @Nested @DisplayName("특정 Year-Month에 대해서 멘토의 예약된 스케줄 조회 API [GET /api/mentors/{mentorId}/reserved-schedule]") - class GetReservedSchedule { + class GetMentorReservedSchedule { private static final String BASE_URL = "/api/mentors/{mentorId}/reserved-schedule"; @Test @@ -50,7 +50,7 @@ class GetReservedSchedule { void success() { // given applyToken(true, mentee); - given(getReservedScheduleUseCase.invoke(any())).willReturn(new ReservedSchedule( + given(getMentorReservedScheduleUseCase.invoke(any())).willReturn(new MentorReservedSchedule( new MentoringPeriodResponse( LocalDate.of(2024, 1, 1), LocalDate.of(2024, 12, 31) @@ -69,23 +69,23 @@ void success() { ), MentoringPeriod.TimeUnit.HALF_HOUR.getValue(), List.of( - new ReservedSchedule.Reserved( + new MentorReservedSchedule.Reserved( LocalDateTime.of(2024, 2, 7, 18, 30), LocalDateTime.of(2024, 2, 7, 19, 0) ), - new ReservedSchedule.Reserved( + new MentorReservedSchedule.Reserved( LocalDateTime.of(2024, 2, 12, 18, 30), LocalDateTime.of(2024, 2, 12, 19, 0) ), - new ReservedSchedule.Reserved( + new MentorReservedSchedule.Reserved( LocalDateTime.of(2024, 2, 14, 18, 30), LocalDateTime.of(2024, 2, 14, 19, 0) ), - new ReservedSchedule.Reserved( + new MentorReservedSchedule.Reserved( LocalDateTime.of(2024, 2, 19, 18, 30), LocalDateTime.of(2024, 2, 19, 19, 0) ), - new ReservedSchedule.Reserved( + new MentorReservedSchedule.Reserved( LocalDateTime.of(2024, 2, 26, 18, 30), LocalDateTime.of(2024, 2, 26, 19, 0) ) From dacc9125aff4c2a02f1ad57a9ebe57d047a00cea Mon Sep 17 00:00:00 2001 From: sjiwon Date: Mon, 26 Feb 2024 22:07:12 +0900 Subject: [PATCH 6/9] =?UTF-8?q?refactor:=20MenteeMainSearchApi,=20MentorMa?= =?UTF-8?q?inSearchApi=20Kotlin=20=EC=A0=84=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/MenteeMainSearchApi.java | 58 ------------------- .../presentation/MenteeMainSearchApi.kt | 57 ++++++++++++++++++ .../presentation/MentorMainSearchApi.java | 58 ------------------- .../presentation/MentorMainSearchApi.kt | 57 ++++++++++++++++++ .../request/GetMenteesByConditionRequest.java | 43 -------------- .../request/GetMenteesByConditionRequest.kt | 40 +++++++++++++ .../request/GetMentorsByConditionRequest.java | 32 ---------- .../request/GetMentorsByConditionRequest.kt | 29 ++++++++++ 8 files changed, 183 insertions(+), 191 deletions(-) delete mode 100644 src/main/java/com/koddy/server/member/presentation/MenteeMainSearchApi.java create mode 100644 src/main/java/com/koddy/server/member/presentation/MenteeMainSearchApi.kt delete mode 100644 src/main/java/com/koddy/server/member/presentation/MentorMainSearchApi.java create mode 100644 src/main/java/com/koddy/server/member/presentation/MentorMainSearchApi.kt delete mode 100644 src/main/java/com/koddy/server/member/presentation/request/GetMenteesByConditionRequest.java create mode 100644 src/main/java/com/koddy/server/member/presentation/request/GetMenteesByConditionRequest.kt delete mode 100644 src/main/java/com/koddy/server/member/presentation/request/GetMentorsByConditionRequest.java create mode 100644 src/main/java/com/koddy/server/member/presentation/request/GetMentorsByConditionRequest.kt diff --git a/src/main/java/com/koddy/server/member/presentation/MenteeMainSearchApi.java b/src/main/java/com/koddy/server/member/presentation/MenteeMainSearchApi.java deleted file mode 100644 index 9cf1e3a6..00000000 --- a/src/main/java/com/koddy/server/member/presentation/MenteeMainSearchApi.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.koddy.server.member.presentation; - -import com.koddy.server.auth.domain.model.Authenticated; -import com.koddy.server.global.annotation.Auth; -import com.koddy.server.global.aop.AccessControl; -import com.koddy.server.global.query.PageResponse; -import com.koddy.server.global.query.SliceResponse; -import com.koddy.server.member.application.usecase.MenteeMainSearchUseCase; -import com.koddy.server.member.application.usecase.query.GetSuggestedMentors; -import com.koddy.server.member.application.usecase.query.response.MentorSimpleSearchProfile; -import com.koddy.server.member.application.usecase.query.response.SuggestedCoffeeChatsByMentorResponse; -import com.koddy.server.member.presentation.request.GetMentorsByConditionRequest; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.validation.Valid; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import java.util.List; - -import static com.koddy.server.member.domain.model.Role.MENTEE; - -@Tag(name = "2-10. 제안온 커피챗, 멘토 둘러보기 조회 API") -@RestController -@RequestMapping("/api/mentors") -public class MenteeMainSearchApi { - private final MenteeMainSearchUseCase menteeMainSearchUseCase; - - public MenteeMainSearchApi(final MenteeMainSearchUseCase menteeMainSearchUseCase) { - this.menteeMainSearchUseCase = menteeMainSearchUseCase; - } - - @Operation(summary = "멘토로부터 제안온 커피챗 조회 Endpoint (멘티 전용)") - @GetMapping("/suggested-coffeechats") - @AccessControl(role = MENTEE) - public ResponseEntity>> getSuggestedMentors( - @Auth final Authenticated authenticated, - @RequestParam(defaultValue = "3") final int limit - ) { - final PageResponse> result = menteeMainSearchUseCase.getSuggestedMentors( - new GetSuggestedMentors(authenticated.id, limit) - ); - return ResponseEntity.ok(result); - } - - @Operation(summary = "멘토 둘러보기 Endpoint") - @GetMapping - public ResponseEntity>> getMentorsByCondition( - @ModelAttribute @Valid final GetMentorsByConditionRequest request - ) { - final SliceResponse> result = menteeMainSearchUseCase.getMentorsByCondition(request.toQuery()); - return ResponseEntity.ok(result); - } -} diff --git a/src/main/java/com/koddy/server/member/presentation/MenteeMainSearchApi.kt b/src/main/java/com/koddy/server/member/presentation/MenteeMainSearchApi.kt new file mode 100644 index 00000000..fa16bee9 --- /dev/null +++ b/src/main/java/com/koddy/server/member/presentation/MenteeMainSearchApi.kt @@ -0,0 +1,57 @@ +package com.koddy.server.member.presentation + +import com.koddy.server.auth.domain.model.Authenticated +import com.koddy.server.global.annotation.Auth +import com.koddy.server.global.aop.AccessControl +import com.koddy.server.global.query.PageResponse +import com.koddy.server.global.query.SliceResponse +import com.koddy.server.member.application.usecase.MenteeMainSearchUseCase +import com.koddy.server.member.application.usecase.query.GetSuggestedMentors +import com.koddy.server.member.application.usecase.query.response.MentorSimpleSearchProfile +import com.koddy.server.member.application.usecase.query.response.SuggestedCoffeeChatsByMentorResponse +import com.koddy.server.member.domain.model.Role +import com.koddy.server.member.presentation.request.GetMentorsByConditionRequest +import io.swagger.v3.oas.annotations.Operation +import io.swagger.v3.oas.annotations.tags.Tag +import jakarta.validation.Valid +import org.springframework.http.ResponseEntity +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.ModelAttribute +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RequestParam +import org.springframework.web.bind.annotation.RestController + +@Tag(name = "2-10. 제안온 커피챗, 멘토 둘러보기 조회 API") +@RestController +@RequestMapping("/api/mentors") +class MenteeMainSearchApi( + private val menteeMainSearchUseCase: MenteeMainSearchUseCase, +) { + @Operation(summary = "멘토로부터 제안온 커피챗 조회 Endpoint (멘티 전용)") + @GetMapping("/suggested-coffeechats") + @AccessControl(role = Role.MENTEE) + fun getSuggestedMentors( + @Auth authenticated: Authenticated, + @RequestParam(defaultValue = "3") limit: Int, + ): ResponseEntity>> { + val result: PageResponse> = + menteeMainSearchUseCase.getSuggestedMentors( + GetSuggestedMentors( + authenticated.id, + limit, + ), + ) + return ResponseEntity.ok(result) + } + + @Operation(summary = "멘토 둘러보기 Endpoint") + @GetMapping + fun getMentorsByCondition( + @ModelAttribute @Valid request: GetMentorsByConditionRequest, + ): ResponseEntity>> { + val result: SliceResponse> = menteeMainSearchUseCase.getMentorsByCondition( + request.toQuery(), + ) + return ResponseEntity.ok(result) + } +} diff --git a/src/main/java/com/koddy/server/member/presentation/MentorMainSearchApi.java b/src/main/java/com/koddy/server/member/presentation/MentorMainSearchApi.java deleted file mode 100644 index f8f97bf1..00000000 --- a/src/main/java/com/koddy/server/member/presentation/MentorMainSearchApi.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.koddy.server.member.presentation; - -import com.koddy.server.auth.domain.model.Authenticated; -import com.koddy.server.global.annotation.Auth; -import com.koddy.server.global.aop.AccessControl; -import com.koddy.server.global.query.PageResponse; -import com.koddy.server.global.query.SliceResponse; -import com.koddy.server.member.application.usecase.MentorMainSearchUseCase; -import com.koddy.server.member.application.usecase.query.GetAppliedMentees; -import com.koddy.server.member.application.usecase.query.response.AppliedCoffeeChatsByMenteeResponse; -import com.koddy.server.member.application.usecase.query.response.MenteeSimpleSearchProfile; -import com.koddy.server.member.presentation.request.GetMenteesByConditionRequest; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.validation.Valid; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import java.util.List; - -import static com.koddy.server.member.domain.model.Role.MENTOR; - -@Tag(name = "2-9. 신청온 커피챗, 멘티 둘러보기 조회 API") -@RestController -@RequestMapping("/api/mentees") -public class MentorMainSearchApi { - private final MentorMainSearchUseCase mentorMainSearchUseCase; - - public MentorMainSearchApi(final MentorMainSearchUseCase mentorMainSearchUseCase) { - this.mentorMainSearchUseCase = mentorMainSearchUseCase; - } - - @Operation(summary = "멘티로부터 신청온 커피챗 조회 Endpoint (멘토 전용)") - @GetMapping("/applied-coffeechats") - @AccessControl(role = MENTOR) - public ResponseEntity>> getAppliedMentees( - @Auth final Authenticated authenticated, - @RequestParam(defaultValue = "3") final int limit - ) { - final PageResponse> result = mentorMainSearchUseCase.getAppliedMentees( - new GetAppliedMentees(authenticated.id, limit) - ); - return ResponseEntity.ok(result); - } - - @Operation(summary = "멘티 둘러보기 Endpoint") - @GetMapping - public ResponseEntity>> getMenteesByCondition( - @ModelAttribute @Valid final GetMenteesByConditionRequest request - ) { - final SliceResponse> result = mentorMainSearchUseCase.getMenteesByCondition(request.toQuery()); - return ResponseEntity.ok(result); - } -} diff --git a/src/main/java/com/koddy/server/member/presentation/MentorMainSearchApi.kt b/src/main/java/com/koddy/server/member/presentation/MentorMainSearchApi.kt new file mode 100644 index 00000000..a441b793 --- /dev/null +++ b/src/main/java/com/koddy/server/member/presentation/MentorMainSearchApi.kt @@ -0,0 +1,57 @@ +package com.koddy.server.member.presentation + +import com.koddy.server.auth.domain.model.Authenticated +import com.koddy.server.global.annotation.Auth +import com.koddy.server.global.aop.AccessControl +import com.koddy.server.global.query.PageResponse +import com.koddy.server.global.query.SliceResponse +import com.koddy.server.member.application.usecase.MentorMainSearchUseCase +import com.koddy.server.member.application.usecase.query.GetAppliedMentees +import com.koddy.server.member.application.usecase.query.response.AppliedCoffeeChatsByMenteeResponse +import com.koddy.server.member.application.usecase.query.response.MenteeSimpleSearchProfile +import com.koddy.server.member.domain.model.Role +import com.koddy.server.member.presentation.request.GetMenteesByConditionRequest +import io.swagger.v3.oas.annotations.Operation +import io.swagger.v3.oas.annotations.tags.Tag +import jakarta.validation.Valid +import org.springframework.http.ResponseEntity +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.ModelAttribute +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RequestParam +import org.springframework.web.bind.annotation.RestController + +@Tag(name = "2-9. 신청온 커피챗, 멘티 둘러보기 조회 API") +@RestController +@RequestMapping("/api/mentees") +class MentorMainSearchApi( + private val mentorMainSearchUseCase: MentorMainSearchUseCase, +) { + @Operation(summary = "멘티로부터 신청온 커피챗 조회 Endpoint (멘토 전용)") + @GetMapping("/applied-coffeechats") + @AccessControl(role = Role.MENTOR) + fun getAppliedMentees( + @Auth authenticated: Authenticated, + @RequestParam(defaultValue = "3") limit: Int, + ): ResponseEntity>> { + val result: PageResponse> = + mentorMainSearchUseCase.getAppliedMentees( + GetAppliedMentees( + authenticated.id, + limit, + ), + ) + return ResponseEntity.ok(result) + } + + @Operation(summary = "멘티 둘러보기 Endpoint") + @GetMapping + fun getMenteesByCondition( + @ModelAttribute @Valid request: GetMenteesByConditionRequest, + ): ResponseEntity>> { + val result: SliceResponse> = mentorMainSearchUseCase.getMenteesByCondition( + request.toQuery(), + ) + return ResponseEntity.ok(result) + } +} diff --git a/src/main/java/com/koddy/server/member/presentation/request/GetMenteesByConditionRequest.java b/src/main/java/com/koddy/server/member/presentation/request/GetMenteesByConditionRequest.java deleted file mode 100644 index 03b52628..00000000 --- a/src/main/java/com/koddy/server/member/presentation/request/GetMenteesByConditionRequest.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.koddy.server.member.presentation.request; - -import com.koddy.server.global.utils.FilteringConverter; -import com.koddy.server.member.application.usecase.query.GetMenteesByCondition; -import com.koddy.server.member.domain.model.Language; -import com.koddy.server.member.domain.model.Nationality; -import jakarta.validation.constraints.Min; -import jakarta.validation.constraints.NotNull; -import org.springframework.util.StringUtils; - -import java.util.List; - -public record GetMenteesByConditionRequest( - String nationalities, - - String languages, - - @NotNull(message = "페이지 번호는 필수입니다.") - @Min(value = 1, message = "페이지는 1부터 시작입니다.") - Integer page -) { - public GetMenteesByCondition toQuery() { - return new GetMenteesByCondition( - convertToNationality(), - convertToLanguageCategory(), - page - ); - } - - private List convertToNationality() { - if (!StringUtils.hasText(nationalities)) { - return List.of(); - } - return FilteringConverter.convertToNationality(nationalities); - } - - private List convertToLanguageCategory() { - if (!StringUtils.hasText(languages)) { - return List.of(); - } - return FilteringConverter.convertToLanguage(languages); - } -} diff --git a/src/main/java/com/koddy/server/member/presentation/request/GetMenteesByConditionRequest.kt b/src/main/java/com/koddy/server/member/presentation/request/GetMenteesByConditionRequest.kt new file mode 100644 index 00000000..ba704602 --- /dev/null +++ b/src/main/java/com/koddy/server/member/presentation/request/GetMenteesByConditionRequest.kt @@ -0,0 +1,40 @@ +package com.koddy.server.member.presentation.request + +import com.koddy.server.global.utils.FilteringConverter +import com.koddy.server.member.application.usecase.query.GetMenteesByCondition +import com.koddy.server.member.domain.model.Language +import com.koddy.server.member.domain.model.Nationality +import jakarta.validation.constraints.Min +import jakarta.validation.constraints.NotNull + +data class GetMenteesByConditionRequest( + val nationalities: String?, + + val languages: String?, + + @field:NotNull(message = "페이지 번호는 필수입니다.") + @field:Min(value = 1, message = "페이지는 1부터 시작입니다.") + val page: Int, +) { + fun toQuery(): GetMenteesByCondition { + return GetMenteesByCondition( + convertToNationality(), + convertToLanguageCategory(), + page, + ) + } + + private fun convertToNationality(): List { + if (nationalities.isNullOrBlank()) { + return listOf() + } + return FilteringConverter.convertToNationality(nationalities) + } + + private fun convertToLanguageCategory(): List { + if (languages.isNullOrBlank()) { + return listOf() + } + return FilteringConverter.convertToLanguage(languages) + } +} diff --git a/src/main/java/com/koddy/server/member/presentation/request/GetMentorsByConditionRequest.java b/src/main/java/com/koddy/server/member/presentation/request/GetMentorsByConditionRequest.java deleted file mode 100644 index 8ab35cea..00000000 --- a/src/main/java/com/koddy/server/member/presentation/request/GetMentorsByConditionRequest.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.koddy.server.member.presentation.request; - -import com.koddy.server.global.utils.FilteringConverter; -import com.koddy.server.member.application.usecase.query.GetMentorsByCondition; -import com.koddy.server.member.domain.model.Language; -import jakarta.validation.constraints.Min; -import jakarta.validation.constraints.NotNull; -import org.springframework.util.StringUtils; - -import java.util.List; - -public record GetMentorsByConditionRequest( - String languages, - - @NotNull(message = "페이지 번호는 필수입니다.") - @Min(value = 1, message = "페이지는 1부터 시작입니다.") - Integer page -) { - public GetMentorsByCondition toQuery() { - return new GetMentorsByCondition( - convertToLanguageCategory(), - page - ); - } - - private List convertToLanguageCategory() { - if (!StringUtils.hasText(languages)) { - return List.of(); - } - return FilteringConverter.convertToLanguage(languages); - } -} diff --git a/src/main/java/com/koddy/server/member/presentation/request/GetMentorsByConditionRequest.kt b/src/main/java/com/koddy/server/member/presentation/request/GetMentorsByConditionRequest.kt new file mode 100644 index 00000000..1b3d7f74 --- /dev/null +++ b/src/main/java/com/koddy/server/member/presentation/request/GetMentorsByConditionRequest.kt @@ -0,0 +1,29 @@ +package com.koddy.server.member.presentation.request + +import com.koddy.server.global.utils.FilteringConverter +import com.koddy.server.member.application.usecase.query.GetMentorsByCondition +import com.koddy.server.member.domain.model.Language +import jakarta.validation.constraints.Min +import jakarta.validation.constraints.NotNull + +data class GetMentorsByConditionRequest( + val languages: String?, + + @field:NotNull(message = "페이지 번호는 필수입니다.") + @field:Min(value = 1, message = "페이지는 1부터 시작입니다.") + val page: Int, +) { + fun toQuery(): GetMentorsByCondition { + return GetMentorsByCondition( + convertToLanguageCategory(), + page, + ) + } + + private fun convertToLanguageCategory(): List { + if (languages.isNullOrBlank()) { + return listOf() + } + return FilteringConverter.convertToLanguage(languages) + } +} From 6ecc42b702a9b16adb9feee9e8d7a18204a17e7e Mon Sep 17 00:00:00 2001 From: sjiwon Date: Mon, 26 Feb 2024 22:13:17 +0900 Subject: [PATCH 7/9] =?UTF-8?q?refactor:=20Member=20Api=20Request=20toQuer?= =?UTF-8?q?y/toCommand=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AuthenticationMentorUnivApi.kt | 25 +++---------------- .../MemberBasicProfileQueryApi.kt | 4 +-- .../MentorReservedScheduleQueryApi.kt | 9 +------ .../AuthenticationConfirmWithMailRequest.kt | 10 +++++++- .../request/AuthenticationWithMailRequest.kt | 9 ++++++- .../AuthenticationWithProofDataRequest.kt | 9 ++++++- .../GetMentorReservedScheduleRequest.kt | 14 ++++++++--- 7 files changed, 42 insertions(+), 38 deletions(-) diff --git a/src/main/java/com/koddy/server/member/presentation/AuthenticationMentorUnivApi.kt b/src/main/java/com/koddy/server/member/presentation/AuthenticationMentorUnivApi.kt index 3c464eb5..98b90d9d 100644 --- a/src/main/java/com/koddy/server/member/presentation/AuthenticationMentorUnivApi.kt +++ b/src/main/java/com/koddy/server/member/presentation/AuthenticationMentorUnivApi.kt @@ -6,9 +6,6 @@ import com.koddy.server.global.aop.AccessControl import com.koddy.server.global.aop.DailyMailAuthLimit import com.koddy.server.global.utils.UniversityInfo import com.koddy.server.member.application.usecase.AuthenticationMentorUnivUseCase -import com.koddy.server.member.application.usecase.command.AuthenticationConfirmWithMailCommand -import com.koddy.server.member.application.usecase.command.AuthenticationWithMailCommand -import com.koddy.server.member.application.usecase.command.AuthenticationWithProofDataCommand import com.koddy.server.member.domain.model.Role import com.koddy.server.member.presentation.request.AuthenticationConfirmWithMailRequest import com.koddy.server.member.presentation.request.AuthenticationWithMailRequest @@ -37,12 +34,7 @@ class AuthenticationMentorUnivApi( @RequestBody @Valid request: AuthenticationWithMailRequest, ): ResponseEntity { UniversityInfo.validateDomain(authenticated, request.schoolMail) - authenticationMentorUnivUseCase.authWithMail( - AuthenticationWithMailCommand( - authenticated.id, - request.schoolMail, - ), - ) + authenticationMentorUnivUseCase.authWithMail(request.toCommand(authenticated.id)) return ResponseEntity.noContent().build() } @@ -54,13 +46,7 @@ class AuthenticationMentorUnivApi( @RequestBody @Valid request: AuthenticationConfirmWithMailRequest, ): ResponseEntity { UniversityInfo.validateDomain(authenticated, request.schoolMail) - authenticationMentorUnivUseCase.confirmMailAuthCode( - AuthenticationConfirmWithMailCommand( - authenticated.id, - request.schoolMail, - request.authCode, - ), - ) + authenticationMentorUnivUseCase.confirmMailAuthCode(request.toCommand(authenticated.id)) return ResponseEntity.noContent().build() } @@ -71,12 +57,7 @@ class AuthenticationMentorUnivApi( @Auth authenticated: Authenticated, @RequestBody @Valid request: AuthenticationWithProofDataRequest, ): ResponseEntity { - authenticationMentorUnivUseCase.authWithProofData( - AuthenticationWithProofDataCommand( - authenticated.id, - request.proofDataUploadUrl, - ), - ) + authenticationMentorUnivUseCase.authWithProofData(request.toCommand(authenticated.id)) return ResponseEntity.noContent().build() } } diff --git a/src/main/java/com/koddy/server/member/presentation/MemberBasicProfileQueryApi.kt b/src/main/java/com/koddy/server/member/presentation/MemberBasicProfileQueryApi.kt index 78acc25b..454d8d03 100644 --- a/src/main/java/com/koddy/server/member/presentation/MemberBasicProfileQueryApi.kt +++ b/src/main/java/com/koddy/server/member/presentation/MemberBasicProfileQueryApi.kt @@ -22,7 +22,7 @@ class MemberBasicProfileQueryApi( fun getMentorProfile( @PathVariable mentorId: Long, ): ResponseEntity { - val response = getMemberBasicProfileUseCase.getMentorProfile(mentorId) + val response: MentorBasicProfile = getMemberBasicProfileUseCase.getMentorProfile(mentorId) return ResponseEntity.ok(response) } @@ -31,7 +31,7 @@ class MemberBasicProfileQueryApi( fun getMenteeProfile( @PathVariable menteeId: Long, ): ResponseEntity { - val response = getMemberBasicProfileUseCase.getMenteeProfile(menteeId) + val response: MenteeBasicProfile = getMemberBasicProfileUseCase.getMenteeProfile(menteeId) return ResponseEntity.ok(response) } } diff --git a/src/main/java/com/koddy/server/member/presentation/MentorReservedScheduleQueryApi.kt b/src/main/java/com/koddy/server/member/presentation/MentorReservedScheduleQueryApi.kt index 0e58c208..0d537090 100644 --- a/src/main/java/com/koddy/server/member/presentation/MentorReservedScheduleQueryApi.kt +++ b/src/main/java/com/koddy/server/member/presentation/MentorReservedScheduleQueryApi.kt @@ -3,7 +3,6 @@ package com.koddy.server.member.presentation import com.koddy.server.auth.domain.model.Authenticated import com.koddy.server.global.annotation.Auth import com.koddy.server.member.application.usecase.GetMentorReservedScheduleUseCase -import com.koddy.server.member.application.usecase.query.GetMentorReservedSchedule import com.koddy.server.member.application.usecase.query.response.MentorReservedSchedule import com.koddy.server.member.presentation.request.GetMentorReservedScheduleRequest import io.swagger.v3.oas.annotations.Operation @@ -29,13 +28,7 @@ class MentorReservedScheduleQueryApi( @PathVariable mentorId: Long, @ModelAttribute @Valid request: GetMentorReservedScheduleRequest, ): ResponseEntity { - val result = getMentorReservedScheduleUseCase.invoke( - GetMentorReservedSchedule( - mentorId, - request.year, - request.month, - ), - ) + val result: MentorReservedSchedule = getMentorReservedScheduleUseCase.invoke(request.toQuery(mentorId)) return ResponseEntity.ok(result) } } diff --git a/src/main/java/com/koddy/server/member/presentation/request/AuthenticationConfirmWithMailRequest.kt b/src/main/java/com/koddy/server/member/presentation/request/AuthenticationConfirmWithMailRequest.kt index 0bb9eab3..e0f176ab 100644 --- a/src/main/java/com/koddy/server/member/presentation/request/AuthenticationConfirmWithMailRequest.kt +++ b/src/main/java/com/koddy/server/member/presentation/request/AuthenticationConfirmWithMailRequest.kt @@ -1,5 +1,6 @@ package com.koddy.server.member.presentation.request +import com.koddy.server.member.application.usecase.command.AuthenticationConfirmWithMailCommand import jakarta.validation.constraints.NotBlank data class AuthenticationConfirmWithMailRequest( @@ -8,4 +9,11 @@ data class AuthenticationConfirmWithMailRequest( @field:NotBlank(message = "인증 번호는 필수입니다.") val authCode: String, -) +) { + fun toCommand(mentorId: Long): AuthenticationConfirmWithMailCommand = + AuthenticationConfirmWithMailCommand( + mentorId, + schoolMail, + authCode, + ) +} diff --git a/src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithMailRequest.kt b/src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithMailRequest.kt index 75084c38..510b3e8f 100644 --- a/src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithMailRequest.kt +++ b/src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithMailRequest.kt @@ -1,8 +1,15 @@ package com.koddy.server.member.presentation.request +import com.koddy.server.member.application.usecase.command.AuthenticationWithMailCommand import jakarta.validation.constraints.NotBlank data class AuthenticationWithMailRequest( @field:NotBlank(message = "인증을 진행할 학교 메일은 필수입니다.") val schoolMail: String, -) +) { + fun toCommand(mentorId: Long): AuthenticationWithMailCommand = + AuthenticationWithMailCommand( + mentorId, + schoolMail, + ) +} diff --git a/src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithProofDataRequest.kt b/src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithProofDataRequest.kt index a67fd882..563ac8e6 100644 --- a/src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithProofDataRequest.kt +++ b/src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithProofDataRequest.kt @@ -1,8 +1,15 @@ package com.koddy.server.member.presentation.request +import com.koddy.server.member.application.usecase.command.AuthenticationWithProofDataCommand import jakarta.validation.constraints.NotBlank data class AuthenticationWithProofDataRequest( @field:NotBlank(message = "증명자료 업로드 URL은 필수입니다.") val proofDataUploadUrl: String, -) +) { + fun toCommand(mentorId: Long): AuthenticationWithProofDataCommand = + AuthenticationWithProofDataCommand( + mentorId, + proofDataUploadUrl, + ) +} diff --git a/src/main/java/com/koddy/server/member/presentation/request/GetMentorReservedScheduleRequest.kt b/src/main/java/com/koddy/server/member/presentation/request/GetMentorReservedScheduleRequest.kt index f4bb737d..5d4047f5 100644 --- a/src/main/java/com/koddy/server/member/presentation/request/GetMentorReservedScheduleRequest.kt +++ b/src/main/java/com/koddy/server/member/presentation/request/GetMentorReservedScheduleRequest.kt @@ -1,11 +1,19 @@ package com.koddy.server.member.presentation.request +import com.koddy.server.member.application.usecase.query.GetMentorReservedSchedule import jakarta.validation.constraints.NotNull data class GetMentorReservedScheduleRequest( - @NotNull(message = "Year 정보는 필수입니다.") + @field:NotNull(message = "Year 정보는 필수입니다.") val year: Int, - @NotNull(message = "Month 정보는 필수입니다.") + @field:NotNull(message = "Month 정보는 필수입니다.") val month: Int, -) +) { + fun toQuery(mentorId: Long): GetMentorReservedSchedule = + GetMentorReservedSchedule( + mentorId, + year, + month, + ) +} From a9c65a5353933c4b12ba3c5474025e909d63b48c Mon Sep 17 00:00:00 2001 From: sjiwon Date: Mon, 26 Feb 2024 22:21:33 +0900 Subject: [PATCH 8/9] =?UTF-8?q?refactor:=20Member=20Api=20Request=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=EB=90=9C=20=EB=AA=A8=EB=8D=B8=EB=81=BC?= =?UTF-8?q?=EB=A6=AC=20Kotlin=20File=EB=A1=9C=20=EC=9D=91=EC=A7=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../usecase/MenteeMainSearchUseCase.java | 6 +- .../usecase/MentorMainSearchUseCase.java | 6 +- ...=> LookAroundMenteesByConditionQuery.java} | 2 +- ...=> LookAroundMentorsByConditionQuery.java} | 2 +- .../presentation/MenteeMainSearchApi.kt | 8 +- .../presentation/MentorMainSearchApi.kt | 8 +- .../AuthenticationConfirmWithMailRequest.kt | 19 ---- .../request/AuthenticationWithMailRequest.kt | 15 ---- .../AuthenticationWithProofDataRequest.kt | 15 ---- .../request/CompleteMenteeProfileRequest.kt | 15 ---- ...leRequest.kt => CompleteProfileRequest.kt} | 16 +++- .../request/GetMentorsByConditionRequest.kt | 29 ------ ...=> LookAroundMembersByConditionRequest.kt} | 31 ++++++- .../request/MentorAuthenticationRequest.kt | 43 +++++++++ .../request/SignUpMentorRequest.kt | 47 ---------- ...ignUpMenteeRequest.kt => SignUpRequest.kt} | 43 ++++++++- .../presentation/request/UpdateInfoRequest.kt | 88 +++++++++++++++++++ .../request/UpdateMenteeBasicInfoRequest.kt | 39 -------- .../request/UpdateMentorBasicInfoRequest.kt | 38 -------- .../request/UpdateMentorScheduleRequest.kt | 15 ---- .../LanguageRequestModel.kt} | 4 +- .../MentoringPeriodRequestModel.kt} | 4 +- .../member/MemberAcceptanceStep.java | 20 ++--- .../MenteeMainSearchAcceptanceTest.java | 2 +- .../MentorMainSearchAcceptanceTest.java | 2 +- .../member/UpdateInfoAcceptanceTest.java | 18 ++-- .../presentation/CompleteAccountApiTest.java | 4 +- .../presentation/ManageAccountApiTest.java | 6 +- .../presentation/MenteeMainSearchApiTest.java | 4 +- .../presentation/MentorMainSearchApiTest.java | 4 +- .../presentation/UpdateMenteeInfoApiTest.java | 4 +- .../presentation/UpdateMentorInfoApiTest.java | 8 +- 32 files changed, 273 insertions(+), 292 deletions(-) rename src/main/java/com/koddy/server/member/application/usecase/query/{GetMenteesByCondition.java => LookAroundMenteesByConditionQuery.java} (93%) rename src/main/java/com/koddy/server/member/application/usecase/query/{GetMentorsByCondition.java => LookAroundMentorsByConditionQuery.java} (91%) delete mode 100644 src/main/java/com/koddy/server/member/presentation/request/AuthenticationConfirmWithMailRequest.kt delete mode 100644 src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithMailRequest.kt delete mode 100644 src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithProofDataRequest.kt delete mode 100644 src/main/java/com/koddy/server/member/presentation/request/CompleteMenteeProfileRequest.kt rename src/main/java/com/koddy/server/member/presentation/request/{CompleteMentorProfileRequest.kt => CompleteProfileRequest.kt} (52%) delete mode 100644 src/main/java/com/koddy/server/member/presentation/request/GetMentorsByConditionRequest.kt rename src/main/java/com/koddy/server/member/presentation/request/{GetMenteesByConditionRequest.kt => LookAroundMembersByConditionRequest.kt} (52%) create mode 100644 src/main/java/com/koddy/server/member/presentation/request/MentorAuthenticationRequest.kt delete mode 100644 src/main/java/com/koddy/server/member/presentation/request/SignUpMentorRequest.kt rename src/main/java/com/koddy/server/member/presentation/request/{SignUpMenteeRequest.kt => SignUpRequest.kt} (54%) create mode 100644 src/main/java/com/koddy/server/member/presentation/request/UpdateInfoRequest.kt delete mode 100644 src/main/java/com/koddy/server/member/presentation/request/UpdateMenteeBasicInfoRequest.kt delete mode 100644 src/main/java/com/koddy/server/member/presentation/request/UpdateMentorBasicInfoRequest.kt delete mode 100644 src/main/java/com/koddy/server/member/presentation/request/UpdateMentorScheduleRequest.kt rename src/main/java/com/koddy/server/member/presentation/request/{LanguageRequest.kt => model/LanguageRequestModel.kt} (85%) rename src/main/java/com/koddy/server/member/presentation/request/{MentoringPeriodRequest.kt => model/MentoringPeriodRequestModel.kt} (77%) diff --git a/src/main/java/com/koddy/server/member/application/usecase/MenteeMainSearchUseCase.java b/src/main/java/com/koddy/server/member/application/usecase/MenteeMainSearchUseCase.java index cd078ff6..10ad7b3a 100644 --- a/src/main/java/com/koddy/server/member/application/usecase/MenteeMainSearchUseCase.java +++ b/src/main/java/com/koddy/server/member/application/usecase/MenteeMainSearchUseCase.java @@ -5,8 +5,8 @@ import com.koddy.server.global.query.PageCreator; import com.koddy.server.global.query.PageResponse; import com.koddy.server.global.query.SliceResponse; -import com.koddy.server.member.application.usecase.query.GetMentorsByCondition; import com.koddy.server.member.application.usecase.query.GetSuggestedMentors; +import com.koddy.server.member.application.usecase.query.LookAroundMentorsByConditionQuery; import com.koddy.server.member.application.usecase.query.response.MentorSimpleSearchProfile; import com.koddy.server.member.application.usecase.query.response.SuggestedCoffeeChatsByMentorResponse; import com.koddy.server.member.domain.model.mentor.Mentor; @@ -41,7 +41,9 @@ public PageResponse> getSuggestedMent } @KoddyReadOnlyTransactional - public SliceResponse> getMentorsByCondition(final GetMentorsByCondition query) { + public SliceResponse> lookAroundMentorsByCondition( + final LookAroundMentorsByConditionQuery query + ) { final SearchMentorCondition condition = query.toCondition(); final Pageable pageable = PageCreator.create(query.page()); final Slice result = menteeMainSearchRepository.fetchMentorsByCondition(condition, pageable); diff --git a/src/main/java/com/koddy/server/member/application/usecase/MentorMainSearchUseCase.java b/src/main/java/com/koddy/server/member/application/usecase/MentorMainSearchUseCase.java index a89c73a8..52f74498 100644 --- a/src/main/java/com/koddy/server/member/application/usecase/MentorMainSearchUseCase.java +++ b/src/main/java/com/koddy/server/member/application/usecase/MentorMainSearchUseCase.java @@ -6,7 +6,7 @@ import com.koddy.server.global.query.PageResponse; import com.koddy.server.global.query.SliceResponse; import com.koddy.server.member.application.usecase.query.GetAppliedMentees; -import com.koddy.server.member.application.usecase.query.GetMenteesByCondition; +import com.koddy.server.member.application.usecase.query.LookAroundMenteesByConditionQuery; import com.koddy.server.member.application.usecase.query.response.AppliedCoffeeChatsByMenteeResponse; import com.koddy.server.member.application.usecase.query.response.MenteeSimpleSearchProfile; import com.koddy.server.member.domain.model.mentee.Mentee; @@ -41,7 +41,9 @@ public PageResponse> getAppliedMentees( } @KoddyReadOnlyTransactional - public SliceResponse> getMenteesByCondition(final GetMenteesByCondition query) { + public SliceResponse> lookAroundMenteesByCondition( + final LookAroundMenteesByConditionQuery query + ) { final SearchMenteeCondition condition = query.toCondition(); final Pageable pageable = PageCreator.create(query.page()); final Slice result = mentorMainSearchRepository.fetchMenteesByCondition(condition, pageable); diff --git a/src/main/java/com/koddy/server/member/application/usecase/query/GetMenteesByCondition.java b/src/main/java/com/koddy/server/member/application/usecase/query/LookAroundMenteesByConditionQuery.java similarity index 93% rename from src/main/java/com/koddy/server/member/application/usecase/query/GetMenteesByCondition.java rename to src/main/java/com/koddy/server/member/application/usecase/query/LookAroundMenteesByConditionQuery.java index 6cba7b12..03af9f8c 100644 --- a/src/main/java/com/koddy/server/member/application/usecase/query/GetMenteesByCondition.java +++ b/src/main/java/com/koddy/server/member/application/usecase/query/LookAroundMenteesByConditionQuery.java @@ -7,7 +7,7 @@ import java.util.List; -public record GetMenteesByCondition( +public record LookAroundMenteesByConditionQuery( List nationalities, List languages, int page diff --git a/src/main/java/com/koddy/server/member/application/usecase/query/GetMentorsByCondition.java b/src/main/java/com/koddy/server/member/application/usecase/query/LookAroundMentorsByConditionQuery.java similarity index 91% rename from src/main/java/com/koddy/server/member/application/usecase/query/GetMentorsByCondition.java rename to src/main/java/com/koddy/server/member/application/usecase/query/LookAroundMentorsByConditionQuery.java index c0428977..30c062e4 100644 --- a/src/main/java/com/koddy/server/member/application/usecase/query/GetMentorsByCondition.java +++ b/src/main/java/com/koddy/server/member/application/usecase/query/LookAroundMentorsByConditionQuery.java @@ -6,7 +6,7 @@ import java.util.List; -public record GetMentorsByCondition( +public record LookAroundMentorsByConditionQuery( List languages, int page ) { diff --git a/src/main/java/com/koddy/server/member/presentation/MenteeMainSearchApi.kt b/src/main/java/com/koddy/server/member/presentation/MenteeMainSearchApi.kt index fa16bee9..d34448e9 100644 --- a/src/main/java/com/koddy/server/member/presentation/MenteeMainSearchApi.kt +++ b/src/main/java/com/koddy/server/member/presentation/MenteeMainSearchApi.kt @@ -10,7 +10,7 @@ import com.koddy.server.member.application.usecase.query.GetSuggestedMentors import com.koddy.server.member.application.usecase.query.response.MentorSimpleSearchProfile import com.koddy.server.member.application.usecase.query.response.SuggestedCoffeeChatsByMentorResponse import com.koddy.server.member.domain.model.Role -import com.koddy.server.member.presentation.request.GetMentorsByConditionRequest +import com.koddy.server.member.presentation.request.LookAroundMentorsByConditionRequest import io.swagger.v3.oas.annotations.Operation import io.swagger.v3.oas.annotations.tags.Tag import jakarta.validation.Valid @@ -46,10 +46,10 @@ class MenteeMainSearchApi( @Operation(summary = "멘토 둘러보기 Endpoint") @GetMapping - fun getMentorsByCondition( - @ModelAttribute @Valid request: GetMentorsByConditionRequest, + fun lookAroundMentorsByCondition( + @ModelAttribute @Valid request: LookAroundMentorsByConditionRequest, ): ResponseEntity>> { - val result: SliceResponse> = menteeMainSearchUseCase.getMentorsByCondition( + val result: SliceResponse> = menteeMainSearchUseCase.lookAroundMentorsByCondition( request.toQuery(), ) return ResponseEntity.ok(result) diff --git a/src/main/java/com/koddy/server/member/presentation/MentorMainSearchApi.kt b/src/main/java/com/koddy/server/member/presentation/MentorMainSearchApi.kt index a441b793..21ce45b7 100644 --- a/src/main/java/com/koddy/server/member/presentation/MentorMainSearchApi.kt +++ b/src/main/java/com/koddy/server/member/presentation/MentorMainSearchApi.kt @@ -10,7 +10,7 @@ import com.koddy.server.member.application.usecase.query.GetAppliedMentees import com.koddy.server.member.application.usecase.query.response.AppliedCoffeeChatsByMenteeResponse import com.koddy.server.member.application.usecase.query.response.MenteeSimpleSearchProfile import com.koddy.server.member.domain.model.Role -import com.koddy.server.member.presentation.request.GetMenteesByConditionRequest +import com.koddy.server.member.presentation.request.LookAroundMenteesByConditionRequest import io.swagger.v3.oas.annotations.Operation import io.swagger.v3.oas.annotations.tags.Tag import jakarta.validation.Valid @@ -46,10 +46,10 @@ class MentorMainSearchApi( @Operation(summary = "멘티 둘러보기 Endpoint") @GetMapping - fun getMenteesByCondition( - @ModelAttribute @Valid request: GetMenteesByConditionRequest, + fun lookAroundMenteesByCondition( + @ModelAttribute @Valid request: LookAroundMenteesByConditionRequest, ): ResponseEntity>> { - val result: SliceResponse> = mentorMainSearchUseCase.getMenteesByCondition( + val result: SliceResponse> = mentorMainSearchUseCase.lookAroundMenteesByCondition( request.toQuery(), ) return ResponseEntity.ok(result) diff --git a/src/main/java/com/koddy/server/member/presentation/request/AuthenticationConfirmWithMailRequest.kt b/src/main/java/com/koddy/server/member/presentation/request/AuthenticationConfirmWithMailRequest.kt deleted file mode 100644 index e0f176ab..00000000 --- a/src/main/java/com/koddy/server/member/presentation/request/AuthenticationConfirmWithMailRequest.kt +++ /dev/null @@ -1,19 +0,0 @@ -package com.koddy.server.member.presentation.request - -import com.koddy.server.member.application.usecase.command.AuthenticationConfirmWithMailCommand -import jakarta.validation.constraints.NotBlank - -data class AuthenticationConfirmWithMailRequest( - @field:NotBlank(message = "인증을 진행할 학교 메일은 필수입니다.") - val schoolMail: String, - - @field:NotBlank(message = "인증 번호는 필수입니다.") - val authCode: String, -) { - fun toCommand(mentorId: Long): AuthenticationConfirmWithMailCommand = - AuthenticationConfirmWithMailCommand( - mentorId, - schoolMail, - authCode, - ) -} diff --git a/src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithMailRequest.kt b/src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithMailRequest.kt deleted file mode 100644 index 510b3e8f..00000000 --- a/src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithMailRequest.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.koddy.server.member.presentation.request - -import com.koddy.server.member.application.usecase.command.AuthenticationWithMailCommand -import jakarta.validation.constraints.NotBlank - -data class AuthenticationWithMailRequest( - @field:NotBlank(message = "인증을 진행할 학교 메일은 필수입니다.") - val schoolMail: String, -) { - fun toCommand(mentorId: Long): AuthenticationWithMailCommand = - AuthenticationWithMailCommand( - mentorId, - schoolMail, - ) -} diff --git a/src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithProofDataRequest.kt b/src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithProofDataRequest.kt deleted file mode 100644 index 563ac8e6..00000000 --- a/src/main/java/com/koddy/server/member/presentation/request/AuthenticationWithProofDataRequest.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.koddy.server.member.presentation.request - -import com.koddy.server.member.application.usecase.command.AuthenticationWithProofDataCommand -import jakarta.validation.constraints.NotBlank - -data class AuthenticationWithProofDataRequest( - @field:NotBlank(message = "증명자료 업로드 URL은 필수입니다.") - val proofDataUploadUrl: String, -) { - fun toCommand(mentorId: Long): AuthenticationWithProofDataCommand = - AuthenticationWithProofDataCommand( - mentorId, - proofDataUploadUrl, - ) -} diff --git a/src/main/java/com/koddy/server/member/presentation/request/CompleteMenteeProfileRequest.kt b/src/main/java/com/koddy/server/member/presentation/request/CompleteMenteeProfileRequest.kt deleted file mode 100644 index 208d7a7d..00000000 --- a/src/main/java/com/koddy/server/member/presentation/request/CompleteMenteeProfileRequest.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.koddy.server.member.presentation.request - -import com.koddy.server.member.application.usecase.command.CompleteMenteeProfileCommand - -data class CompleteMenteeProfileRequest( - val introduction: String?, - val profileImageUrl: String?, -) { - fun toCommand(menteeId: Long): CompleteMenteeProfileCommand = - CompleteMenteeProfileCommand( - menteeId, - introduction, - profileImageUrl, - ) -} diff --git a/src/main/java/com/koddy/server/member/presentation/request/CompleteMentorProfileRequest.kt b/src/main/java/com/koddy/server/member/presentation/request/CompleteProfileRequest.kt similarity index 52% rename from src/main/java/com/koddy/server/member/presentation/request/CompleteMentorProfileRequest.kt rename to src/main/java/com/koddy/server/member/presentation/request/CompleteProfileRequest.kt index 7e45bb29..4c792734 100644 --- a/src/main/java/com/koddy/server/member/presentation/request/CompleteMentorProfileRequest.kt +++ b/src/main/java/com/koddy/server/member/presentation/request/CompleteProfileRequest.kt @@ -1,11 +1,13 @@ package com.koddy.server.member.presentation.request +import com.koddy.server.member.application.usecase.command.CompleteMenteeProfileCommand import com.koddy.server.member.application.usecase.command.CompleteMentorProfileCommand +import com.koddy.server.member.presentation.request.model.MentoringPeriodRequestModel data class CompleteMentorProfileRequest( val introduction: String?, val profileImageUrl: String?, - val period: MentoringPeriodRequest?, + val period: MentoringPeriodRequestModel?, val schedules: List = emptyList(), ) { fun toCommand(mentorId: Long): CompleteMentorProfileCommand = @@ -17,3 +19,15 @@ data class CompleteMentorProfileRequest( schedules.map { it.toTimeline() }, ) } + +data class CompleteMenteeProfileRequest( + val introduction: String?, + val profileImageUrl: String?, +) { + fun toCommand(menteeId: Long): CompleteMenteeProfileCommand = + CompleteMenteeProfileCommand( + menteeId, + introduction, + profileImageUrl, + ) +} diff --git a/src/main/java/com/koddy/server/member/presentation/request/GetMentorsByConditionRequest.kt b/src/main/java/com/koddy/server/member/presentation/request/GetMentorsByConditionRequest.kt deleted file mode 100644 index 1b3d7f74..00000000 --- a/src/main/java/com/koddy/server/member/presentation/request/GetMentorsByConditionRequest.kt +++ /dev/null @@ -1,29 +0,0 @@ -package com.koddy.server.member.presentation.request - -import com.koddy.server.global.utils.FilteringConverter -import com.koddy.server.member.application.usecase.query.GetMentorsByCondition -import com.koddy.server.member.domain.model.Language -import jakarta.validation.constraints.Min -import jakarta.validation.constraints.NotNull - -data class GetMentorsByConditionRequest( - val languages: String?, - - @field:NotNull(message = "페이지 번호는 필수입니다.") - @field:Min(value = 1, message = "페이지는 1부터 시작입니다.") - val page: Int, -) { - fun toQuery(): GetMentorsByCondition { - return GetMentorsByCondition( - convertToLanguageCategory(), - page, - ) - } - - private fun convertToLanguageCategory(): List { - if (languages.isNullOrBlank()) { - return listOf() - } - return FilteringConverter.convertToLanguage(languages) - } -} diff --git a/src/main/java/com/koddy/server/member/presentation/request/GetMenteesByConditionRequest.kt b/src/main/java/com/koddy/server/member/presentation/request/LookAroundMembersByConditionRequest.kt similarity index 52% rename from src/main/java/com/koddy/server/member/presentation/request/GetMenteesByConditionRequest.kt rename to src/main/java/com/koddy/server/member/presentation/request/LookAroundMembersByConditionRequest.kt index ba704602..a7bb65b8 100644 --- a/src/main/java/com/koddy/server/member/presentation/request/GetMenteesByConditionRequest.kt +++ b/src/main/java/com/koddy/server/member/presentation/request/LookAroundMembersByConditionRequest.kt @@ -1,13 +1,36 @@ package com.koddy.server.member.presentation.request import com.koddy.server.global.utils.FilteringConverter -import com.koddy.server.member.application.usecase.query.GetMenteesByCondition +import com.koddy.server.member.application.usecase.query.LookAroundMenteesByConditionQuery +import com.koddy.server.member.application.usecase.query.LookAroundMentorsByConditionQuery import com.koddy.server.member.domain.model.Language import com.koddy.server.member.domain.model.Nationality import jakarta.validation.constraints.Min import jakarta.validation.constraints.NotNull -data class GetMenteesByConditionRequest( +data class LookAroundMentorsByConditionRequest( + val languages: String?, + + @field:NotNull(message = "페이지 번호는 필수입니다.") + @field:Min(value = 1, message = "페이지는 1부터 시작입니다.") + val page: Int, +) { + fun toQuery(): LookAroundMentorsByConditionQuery { + return LookAroundMentorsByConditionQuery( + convertToLanguageCategory(), + page, + ) + } + + private fun convertToLanguageCategory(): List { + if (languages.isNullOrBlank()) { + return listOf() + } + return FilteringConverter.convertToLanguage(languages) + } +} + +data class LookAroundMenteesByConditionRequest( val nationalities: String?, val languages: String?, @@ -16,8 +39,8 @@ data class GetMenteesByConditionRequest( @field:Min(value = 1, message = "페이지는 1부터 시작입니다.") val page: Int, ) { - fun toQuery(): GetMenteesByCondition { - return GetMenteesByCondition( + fun toQuery(): LookAroundMenteesByConditionQuery { + return LookAroundMenteesByConditionQuery( convertToNationality(), convertToLanguageCategory(), page, diff --git a/src/main/java/com/koddy/server/member/presentation/request/MentorAuthenticationRequest.kt b/src/main/java/com/koddy/server/member/presentation/request/MentorAuthenticationRequest.kt new file mode 100644 index 00000000..56d83890 --- /dev/null +++ b/src/main/java/com/koddy/server/member/presentation/request/MentorAuthenticationRequest.kt @@ -0,0 +1,43 @@ +package com.koddy.server.member.presentation.request + +import com.koddy.server.member.application.usecase.command.AuthenticationConfirmWithMailCommand +import com.koddy.server.member.application.usecase.command.AuthenticationWithMailCommand +import com.koddy.server.member.application.usecase.command.AuthenticationWithProofDataCommand +import jakarta.validation.constraints.NotBlank + +data class AuthenticationWithMailRequest( + @field:NotBlank(message = "인증을 진행할 학교 메일은 필수입니다.") + val schoolMail: String, +) { + fun toCommand(mentorId: Long): AuthenticationWithMailCommand = + AuthenticationWithMailCommand( + mentorId, + schoolMail, + ) +} + +data class AuthenticationConfirmWithMailRequest( + @field:NotBlank(message = "인증을 진행할 학교 메일은 필수입니다.") + val schoolMail: String, + + @field:NotBlank(message = "인증 번호는 필수입니다.") + val authCode: String, +) { + fun toCommand(mentorId: Long): AuthenticationConfirmWithMailCommand = + AuthenticationConfirmWithMailCommand( + mentorId, + schoolMail, + authCode, + ) +} + +data class AuthenticationWithProofDataRequest( + @field:NotBlank(message = "증명자료 업로드 URL은 필수입니다.") + val proofDataUploadUrl: String, +) { + fun toCommand(mentorId: Long): AuthenticationWithProofDataCommand = + AuthenticationWithProofDataCommand( + mentorId, + proofDataUploadUrl, + ) +} diff --git a/src/main/java/com/koddy/server/member/presentation/request/SignUpMentorRequest.kt b/src/main/java/com/koddy/server/member/presentation/request/SignUpMentorRequest.kt deleted file mode 100644 index abe4a051..00000000 --- a/src/main/java/com/koddy/server/member/presentation/request/SignUpMentorRequest.kt +++ /dev/null @@ -1,47 +0,0 @@ -package com.koddy.server.member.presentation.request - -import com.koddy.server.auth.domain.model.oauth.OAuthProvider -import com.koddy.server.member.application.usecase.command.SignUpMentorCommand -import com.koddy.server.member.domain.model.Email -import com.koddy.server.member.domain.model.SocialPlatform -import com.koddy.server.member.domain.model.mentor.UniversityProfile -import jakarta.validation.constraints.NotBlank -import jakarta.validation.constraints.NotNull - -data class SignUpMentorRequest( - @field:NotBlank(message = "소셜 플랫폼 정보는 필수입니다.") - val provider: String, - - @field:NotBlank(message = "소셜 플랫폼 ID는 필수입니다.") - val socialId: String, - - @field:NotBlank(message = "이메일은 필수입니다.") - val email: String, - - @field:NotBlank(message = "이름은 필수입니다.") - val name: String, - - @field:NotNull(message = "사용 가능한 언어를 선택해주세요.") - val languages: LanguageRequest, - - @field:NotBlank(message = "학교는 필수입니다.") - val school: String, - - @field:NotBlank(message = "전공은 필수입니다.") - val major: String, - - @field:NotNull(message = "학번은 필수입니다.") - val enteredIn: Int, -) { - fun toCommand(): SignUpMentorCommand = - SignUpMentorCommand( - SocialPlatform( - OAuthProvider.from(provider), - socialId, - Email.from(email), - ), - name, - languages.toLanguages(), - UniversityProfile(school, major, enteredIn), - ) -} diff --git a/src/main/java/com/koddy/server/member/presentation/request/SignUpMenteeRequest.kt b/src/main/java/com/koddy/server/member/presentation/request/SignUpRequest.kt similarity index 54% rename from src/main/java/com/koddy/server/member/presentation/request/SignUpMenteeRequest.kt rename to src/main/java/com/koddy/server/member/presentation/request/SignUpRequest.kt index fc9bc87a..556d9d8b 100644 --- a/src/main/java/com/koddy/server/member/presentation/request/SignUpMenteeRequest.kt +++ b/src/main/java/com/koddy/server/member/presentation/request/SignUpRequest.kt @@ -2,13 +2,54 @@ package com.koddy.server.member.presentation.request import com.koddy.server.auth.domain.model.oauth.OAuthProvider import com.koddy.server.member.application.usecase.command.SignUpMenteeCommand +import com.koddy.server.member.application.usecase.command.SignUpMentorCommand import com.koddy.server.member.domain.model.Email import com.koddy.server.member.domain.model.Nationality import com.koddy.server.member.domain.model.SocialPlatform import com.koddy.server.member.domain.model.mentee.Interest +import com.koddy.server.member.domain.model.mentor.UniversityProfile +import com.koddy.server.member.presentation.request.model.LanguageRequestModel import jakarta.validation.constraints.NotBlank import jakarta.validation.constraints.NotNull +data class SignUpMentorRequest( + @field:NotBlank(message = "소셜 플랫폼 정보는 필수입니다.") + val provider: String, + + @field:NotBlank(message = "소셜 플랫폼 ID는 필수입니다.") + val socialId: String, + + @field:NotBlank(message = "이메일은 필수입니다.") + val email: String, + + @field:NotBlank(message = "이름은 필수입니다.") + val name: String, + + @field:NotNull(message = "사용 가능한 언어를 선택해주세요.") + val languages: LanguageRequestModel, + + @field:NotBlank(message = "학교는 필수입니다.") + val school: String, + + @field:NotBlank(message = "전공은 필수입니다.") + val major: String, + + @field:NotNull(message = "학번은 필수입니다.") + val enteredIn: Int, +) { + fun toCommand(): SignUpMentorCommand = + SignUpMentorCommand( + SocialPlatform( + OAuthProvider.from(provider), + socialId, + Email.from(email), + ), + name, + languages.toLanguages(), + UniversityProfile(school, major, enteredIn), + ) +} + data class SignUpMenteeRequest( @field:NotBlank(message = "소셜 플랫폼 정보는 필수입니다.") val provider: String, @@ -26,7 +67,7 @@ data class SignUpMenteeRequest( val nationality: String, @field:NotNull(message = "사용 가능한 언어를 선택해주세요.") - val languages: LanguageRequest, + val languages: LanguageRequestModel, @field:NotBlank(message = "관심있는 학교는 필수입니다.") val interestSchool: String, diff --git a/src/main/java/com/koddy/server/member/presentation/request/UpdateInfoRequest.kt b/src/main/java/com/koddy/server/member/presentation/request/UpdateInfoRequest.kt new file mode 100644 index 00000000..0f03fca9 --- /dev/null +++ b/src/main/java/com/koddy/server/member/presentation/request/UpdateInfoRequest.kt @@ -0,0 +1,88 @@ +package com.koddy.server.member.presentation.request + +import com.koddy.server.member.application.usecase.command.UpdateMenteeBasicInfoCommand +import com.koddy.server.member.application.usecase.command.UpdateMentorBasicInfoCommand +import com.koddy.server.member.application.usecase.command.UpdateMentorScheduleCommand +import com.koddy.server.member.domain.model.Nationality +import com.koddy.server.member.presentation.request.model.LanguageRequestModel +import com.koddy.server.member.presentation.request.model.MentoringPeriodRequestModel +import jakarta.validation.constraints.NotBlank +import jakarta.validation.constraints.NotNull + +data class UpdateMenteeBasicInfoRequest( + @field:NotBlank(message = "이름은 필수입니다.") + val name: String, + + @field:NotBlank(message = "국적은 필수입니다.") + val nationality: String, + + val profileImageUrl: String?, + + val introduction: String?, + + @field:NotNull(message = "사용 가능한 언어를 선택해주세요.") + val languages: LanguageRequestModel, + + @field:NotBlank(message = "관심있는 학교 정보는 필수입니다.") + val interestSchool: String, + + @field:NotBlank(message = "관심있는 전공 정보는 필수입니다.") + val interestMajor: String, +) { + fun toCommand(menteeId: Long): UpdateMenteeBasicInfoCommand = + UpdateMenteeBasicInfoCommand( + menteeId, + name, + Nationality.from(nationality), + profileImageUrl, + introduction, + languages.toLanguages(), + interestSchool, + interestMajor, + ) +} + +data class UpdateMentorBasicInfoRequest( + @field:NotBlank(message = "이름은 필수입니다.") + val name: String, + + val profileImageUrl: String?, + + val introduction: String?, + + @field:NotNull(message = "사용 가능한 언어를 선택해주세요.") + val languages: LanguageRequestModel, + + @field:NotBlank(message = "학교 정보는 필수입니다.") + val school: String, + + @field:NotBlank(message = "전공 정보는 필수입니다.") + val major: String, + + @field:NotNull(message = "학번 정보는 필수입니다.") + val enteredIn: Int, +) { + fun toCommand(mentorId: Long): UpdateMentorBasicInfoCommand = + UpdateMentorBasicInfoCommand( + mentorId, + name, + profileImageUrl, + introduction, + languages.toLanguages(), + school, + major, + enteredIn, + ) +} + +data class UpdateMentorScheduleRequest( + val period: MentoringPeriodRequestModel?, + val schedules: List = emptyList(), +) { + fun toCommand(mentorId: Long): UpdateMentorScheduleCommand = + UpdateMentorScheduleCommand( + mentorId, + period?.toPeriod(), + schedules.map { it.toTimeline() }, + ) +} diff --git a/src/main/java/com/koddy/server/member/presentation/request/UpdateMenteeBasicInfoRequest.kt b/src/main/java/com/koddy/server/member/presentation/request/UpdateMenteeBasicInfoRequest.kt deleted file mode 100644 index eaa1b5c6..00000000 --- a/src/main/java/com/koddy/server/member/presentation/request/UpdateMenteeBasicInfoRequest.kt +++ /dev/null @@ -1,39 +0,0 @@ -package com.koddy.server.member.presentation.request - -import com.koddy.server.member.application.usecase.command.UpdateMenteeBasicInfoCommand -import com.koddy.server.member.domain.model.Nationality -import jakarta.validation.constraints.NotBlank -import jakarta.validation.constraints.NotNull - -data class UpdateMenteeBasicInfoRequest( - @field:NotBlank(message = "이름은 필수입니다.") - val name: String, - - @field:NotBlank(message = "국적은 필수입니다.") - val nationality: String, - - val profileImageUrl: String?, - - val introduction: String?, - - @field:NotNull(message = "사용 가능한 언어를 선택해주세요.") - val languages: LanguageRequest, - - @field:NotBlank(message = "관심있는 학교 정보는 필수입니다.") - val interestSchool: String, - - @field:NotBlank(message = "관심있는 전공 정보는 필수입니다.") - val interestMajor: String, -) { - fun toCommand(menteeId: Long): UpdateMenteeBasicInfoCommand = - UpdateMenteeBasicInfoCommand( - menteeId, - name, - Nationality.from(nationality), - profileImageUrl, - introduction, - languages.toLanguages(), - interestSchool, - interestMajor, - ) -} diff --git a/src/main/java/com/koddy/server/member/presentation/request/UpdateMentorBasicInfoRequest.kt b/src/main/java/com/koddy/server/member/presentation/request/UpdateMentorBasicInfoRequest.kt deleted file mode 100644 index b701090f..00000000 --- a/src/main/java/com/koddy/server/member/presentation/request/UpdateMentorBasicInfoRequest.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.koddy.server.member.presentation.request - -import com.koddy.server.member.application.usecase.command.UpdateMentorBasicInfoCommand -import jakarta.validation.constraints.NotBlank -import jakarta.validation.constraints.NotNull - -data class UpdateMentorBasicInfoRequest( - @field:NotBlank(message = "이름은 필수입니다.") - val name: String, - - val profileImageUrl: String?, - - val introduction: String?, - - @field:NotNull(message = "사용 가능한 언어를 선택해주세요.") - val languages: LanguageRequest, - - @field:NotBlank(message = "학교 정보는 필수입니다.") - val school: String, - - @field:NotBlank(message = "전공 정보는 필수입니다.") - val major: String, - - @field:NotNull(message = "학번 정보는 필수입니다.") - val enteredIn: Int, -) { - fun toCommand(mentorId: Long): UpdateMentorBasicInfoCommand = - UpdateMentorBasicInfoCommand( - mentorId, - name, - profileImageUrl, - introduction, - languages.toLanguages(), - school, - major, - enteredIn, - ) -} diff --git a/src/main/java/com/koddy/server/member/presentation/request/UpdateMentorScheduleRequest.kt b/src/main/java/com/koddy/server/member/presentation/request/UpdateMentorScheduleRequest.kt deleted file mode 100644 index 7499003d..00000000 --- a/src/main/java/com/koddy/server/member/presentation/request/UpdateMentorScheduleRequest.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.koddy.server.member.presentation.request - -import com.koddy.server.member.application.usecase.command.UpdateMentorScheduleCommand - -data class UpdateMentorScheduleRequest( - val period: MentoringPeriodRequest?, - val schedules: List = emptyList(), -) { - fun toCommand(mentorId: Long): UpdateMentorScheduleCommand = - UpdateMentorScheduleCommand( - mentorId, - period?.toPeriod(), - schedules.map { it.toTimeline() }, - ) -} diff --git a/src/main/java/com/koddy/server/member/presentation/request/LanguageRequest.kt b/src/main/java/com/koddy/server/member/presentation/request/model/LanguageRequestModel.kt similarity index 85% rename from src/main/java/com/koddy/server/member/presentation/request/LanguageRequest.kt rename to src/main/java/com/koddy/server/member/presentation/request/model/LanguageRequestModel.kt index b41a36c3..e597077a 100644 --- a/src/main/java/com/koddy/server/member/presentation/request/LanguageRequest.kt +++ b/src/main/java/com/koddy/server/member/presentation/request/model/LanguageRequestModel.kt @@ -1,9 +1,9 @@ -package com.koddy.server.member.presentation.request +package com.koddy.server.member.presentation.request.model import com.koddy.server.member.domain.model.Language import jakarta.validation.constraints.NotBlank -data class LanguageRequest( +data class LanguageRequestModel( @field:NotBlank(message = "메인 언어를 선택해주세요.") val main: String, diff --git a/src/main/java/com/koddy/server/member/presentation/request/MentoringPeriodRequest.kt b/src/main/java/com/koddy/server/member/presentation/request/model/MentoringPeriodRequestModel.kt similarity index 77% rename from src/main/java/com/koddy/server/member/presentation/request/MentoringPeriodRequest.kt rename to src/main/java/com/koddy/server/member/presentation/request/model/MentoringPeriodRequestModel.kt index efa31e0a..dfe16f3c 100644 --- a/src/main/java/com/koddy/server/member/presentation/request/MentoringPeriodRequest.kt +++ b/src/main/java/com/koddy/server/member/presentation/request/model/MentoringPeriodRequestModel.kt @@ -1,9 +1,9 @@ -package com.koddy.server.member.presentation.request +package com.koddy.server.member.presentation.request.model import com.koddy.server.member.domain.model.mentor.MentoringPeriod import java.time.LocalDate -data class MentoringPeriodRequest( +data class MentoringPeriodRequestModel( val startDate: LocalDate?, val endDate: LocalDate?, ) { diff --git a/src/test/java/com/koddy/server/acceptance/member/MemberAcceptanceStep.java b/src/test/java/com/koddy/server/acceptance/member/MemberAcceptanceStep.java index c0d13196..87f2acae 100644 --- a/src/test/java/com/koddy/server/acceptance/member/MemberAcceptanceStep.java +++ b/src/test/java/com/koddy/server/acceptance/member/MemberAcceptanceStep.java @@ -9,15 +9,15 @@ import com.koddy.server.member.presentation.request.CompleteMenteeProfileRequest; import com.koddy.server.member.presentation.request.CompleteMentorProfileRequest; import com.koddy.server.member.presentation.request.End; -import com.koddy.server.member.presentation.request.LanguageRequest; import com.koddy.server.member.presentation.request.MentorScheduleRequest; -import com.koddy.server.member.presentation.request.MentoringPeriodRequest; import com.koddy.server.member.presentation.request.SignUpMenteeRequest; import com.koddy.server.member.presentation.request.SignUpMentorRequest; import com.koddy.server.member.presentation.request.Start; import com.koddy.server.member.presentation.request.UpdateMenteeBasicInfoRequest; import com.koddy.server.member.presentation.request.UpdateMentorBasicInfoRequest; import com.koddy.server.member.presentation.request.UpdateMentorScheduleRequest; +import com.koddy.server.member.presentation.request.model.LanguageRequestModel; +import com.koddy.server.member.presentation.request.model.MentoringPeriodRequestModel; import io.restassured.response.ValidatableResponse; import org.springframework.web.util.UriComponentsBuilder; @@ -51,7 +51,7 @@ public class MemberAcceptanceStep { fixture.getPlatform().getSocialId(), fixture.getPlatform().getEmail().getValue(), fixture.getName(), - new LanguageRequest( + new LanguageRequestModel( fixture.getLanguages() .stream() .filter(it -> it.getType() == Language.Type.MAIN) @@ -96,7 +96,7 @@ public class MemberAcceptanceStep { fixture.getPlatform().getEmail().getValue(), fixture.getName(), fixture.getNationality().code, - new LanguageRequest( + new LanguageRequestModel( fixture.getLanguages() .stream() .filter(it -> it.getType() == Language.Type.MAIN) @@ -137,7 +137,7 @@ public class MemberAcceptanceStep { final CompleteMentorProfileRequest request = new CompleteMentorProfileRequest( fixture.getIntroduction(), fixture.getProfileImageUrl(), - new MentoringPeriodRequest( + new MentoringPeriodRequestModel( fixture.getMentoringPeriod().getStartDate(), fixture.getMentoringPeriod().getEndDate() ), @@ -177,7 +177,7 @@ public class MemberAcceptanceStep { public static ValidatableResponse 멘토_기본_정보를_수정한다( final MentorFixture fixture, - final LanguageRequest languageRequest, + final LanguageRequestModel languageRequestModel, final String accessToken ) { final String uri = UriComponentsBuilder @@ -190,7 +190,7 @@ public class MemberAcceptanceStep { fixture.getName(), fixture.getProfileImageUrl(), fixture.getIntroduction(), - languageRequest, + languageRequestModel, fixture.getUniversityProfile().getSchool(), fixture.getUniversityProfile().getMajor(), fixture.getUniversityProfile().getEnteredIn() @@ -207,7 +207,7 @@ public class MemberAcceptanceStep { .getPath(); final UpdateMentorScheduleRequest request = new UpdateMentorScheduleRequest( - new MentoringPeriodRequest( + new MentoringPeriodRequestModel( fixture.getMentoringPeriod().getStartDate(), fixture.getMentoringPeriod().getEndDate() ), @@ -232,7 +232,7 @@ public class MemberAcceptanceStep { public static ValidatableResponse 멘티_기본_정보를_수정한다( final MenteeFixture fixture, - final LanguageRequest languageRequest, + final LanguageRequestModel languageRequestModel, final String accessToken ) { final String uri = UriComponentsBuilder @@ -246,7 +246,7 @@ public class MemberAcceptanceStep { fixture.getNationality().code, fixture.getProfileImageUrl(), fixture.getIntroduction(), - languageRequest, + languageRequestModel, fixture.getInterest().getSchool(), fixture.getInterest().getMajor() ); diff --git a/src/test/java/com/koddy/server/acceptance/member/MenteeMainSearchAcceptanceTest.java b/src/test/java/com/koddy/server/acceptance/member/MenteeMainSearchAcceptanceTest.java index 46704ce4..10d055de 100644 --- a/src/test/java/com/koddy/server/acceptance/member/MenteeMainSearchAcceptanceTest.java +++ b/src/test/java/com/koddy/server/acceptance/member/MenteeMainSearchAcceptanceTest.java @@ -113,7 +113,7 @@ void success() { @Nested @DisplayName("멘토 둘러보기 API") - class GetMentorsByCondition { + class LookAroundMentorsByConditionQuery { private static final String BASE_URL = "/api/mentors"; @Test diff --git a/src/test/java/com/koddy/server/acceptance/member/MentorMainSearchAcceptanceTest.java b/src/test/java/com/koddy/server/acceptance/member/MentorMainSearchAcceptanceTest.java index a017f336..dbe882d0 100644 --- a/src/test/java/com/koddy/server/acceptance/member/MentorMainSearchAcceptanceTest.java +++ b/src/test/java/com/koddy/server/acceptance/member/MentorMainSearchAcceptanceTest.java @@ -139,7 +139,7 @@ void success() { @Nested @DisplayName("멘티 둘러보기 API") - class GetMenteesByCondition { + class LookAroundMenteesByConditionQuery { private static final String BASE_URL = "/api/mentees"; @Test diff --git a/src/test/java/com/koddy/server/acceptance/member/UpdateInfoAcceptanceTest.java b/src/test/java/com/koddy/server/acceptance/member/UpdateInfoAcceptanceTest.java index 8ac7eee1..3df24d09 100644 --- a/src/test/java/com/koddy/server/acceptance/member/UpdateInfoAcceptanceTest.java +++ b/src/test/java/com/koddy/server/acceptance/member/UpdateInfoAcceptanceTest.java @@ -2,7 +2,7 @@ import com.koddy.server.common.AcceptanceTest; import com.koddy.server.common.containers.callback.DatabaseCleanerEachCallbackExtension; -import com.koddy.server.member.presentation.request.LanguageRequest; +import com.koddy.server.member.presentation.request.model.LanguageRequestModel; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -40,11 +40,11 @@ class BasicInfo { @DisplayName("멘티는 접근 권한이 없다") void throwExceptionByInvalidPermission() { final String accessToken = MENTEE_1.회원가입과_로그인을_진행한다().token().accessToken(); - final LanguageRequest languageRequest = new LanguageRequest( + final LanguageRequestModel languageRequestModel = new LanguageRequestModel( EN.getCode(), List.of(KR.getCode(), CN.getCode(), JP.getCode(), VN.getCode()) ); - 멘토_기본_정보를_수정한다(MENTOR_2, languageRequest, accessToken) + 멘토_기본_정보를_수정한다(MENTOR_2, languageRequestModel, accessToken) .statusCode(FORBIDDEN.value()) .body("errorCode", is(INVALID_PERMISSION.getErrorCode())) .body("message", is(INVALID_PERMISSION.getMessage())); @@ -54,11 +54,11 @@ void throwExceptionByInvalidPermission() { @DisplayName("멘토 기본 정보를 수정한다") void success() { final String accessToken = MENTOR_1.회원가입과_로그인을_진행한다().token().accessToken(); - final LanguageRequest languageRequest = new LanguageRequest( + final LanguageRequestModel languageRequestModel = new LanguageRequestModel( EN.getCode(), List.of(KR.getCode(), CN.getCode(), JP.getCode(), VN.getCode()) ); - 멘토_기본_정보를_수정한다(MENTOR_2, languageRequest, accessToken) + 멘토_기본_정보를_수정한다(MENTOR_2, languageRequestModel, accessToken) .statusCode(NO_CONTENT.value()); } } @@ -96,11 +96,11 @@ class BasicInfo { @DisplayName("멘토는 접근 권한이 없다") void throwExceptionByInvalidPermission() { final String accessToken = MENTOR_1.회원가입과_로그인을_진행한다().token().accessToken(); - final LanguageRequest languageRequest = new LanguageRequest( + final LanguageRequestModel languageRequestModel = new LanguageRequestModel( KR.getCode(), List.of(EN.getCode(), CN.getCode(), JP.getCode(), VN.getCode()) ); - 멘티_기본_정보를_수정한다(MENTEE_2, languageRequest, accessToken) + 멘티_기본_정보를_수정한다(MENTEE_2, languageRequestModel, accessToken) .statusCode(FORBIDDEN.value()) .body("errorCode", is(INVALID_PERMISSION.getErrorCode())) .body("message", is(INVALID_PERMISSION.getMessage())); @@ -110,11 +110,11 @@ void throwExceptionByInvalidPermission() { @DisplayName("멘티 기본 정보를 수정한다") void success() { final String accessToken = MENTEE_1.회원가입과_로그인을_진행한다().token().accessToken(); - final LanguageRequest languageRequest = new LanguageRequest( + final LanguageRequestModel languageRequestModel = new LanguageRequestModel( KR.getCode(), List.of(EN.getCode(), CN.getCode(), JP.getCode(), VN.getCode()) ); - 멘티_기본_정보를_수정한다(MENTEE_2, languageRequest, accessToken) + 멘티_기본_정보를_수정한다(MENTEE_2, languageRequestModel, accessToken) .statusCode(NO_CONTENT.value()); } } diff --git a/src/test/java/com/koddy/server/member/presentation/CompleteAccountApiTest.java b/src/test/java/com/koddy/server/member/presentation/CompleteAccountApiTest.java index 5ceceeb2..5a80ae79 100644 --- a/src/test/java/com/koddy/server/member/presentation/CompleteAccountApiTest.java +++ b/src/test/java/com/koddy/server/member/presentation/CompleteAccountApiTest.java @@ -10,8 +10,8 @@ import com.koddy.server.member.presentation.request.CompleteMentorProfileRequest; import com.koddy.server.member.presentation.request.End; import com.koddy.server.member.presentation.request.MentorScheduleRequest; -import com.koddy.server.member.presentation.request.MentoringPeriodRequest; import com.koddy.server.member.presentation.request.Start; +import com.koddy.server.member.presentation.request.model.MentoringPeriodRequestModel; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -43,7 +43,7 @@ class CompleteMentor { private final CompleteMentorProfileRequest request = new CompleteMentorProfileRequest( MENTOR_1.getIntroduction(), MENTOR_1.getProfileImageUrl(), - new MentoringPeriodRequest( + new MentoringPeriodRequestModel( MENTOR_1.getMentoringPeriod().getStartDate(), MENTOR_1.getMentoringPeriod().getEndDate() ), diff --git a/src/test/java/com/koddy/server/member/presentation/ManageAccountApiTest.java b/src/test/java/com/koddy/server/member/presentation/ManageAccountApiTest.java index db2d5b9e..fbaaf7b5 100644 --- a/src/test/java/com/koddy/server/member/presentation/ManageAccountApiTest.java +++ b/src/test/java/com/koddy/server/member/presentation/ManageAccountApiTest.java @@ -6,9 +6,9 @@ import com.koddy.server.member.application.usecase.SignUpUsecase; import com.koddy.server.member.domain.model.Language; import com.koddy.server.member.domain.model.mentor.Mentor; -import com.koddy.server.member.presentation.request.LanguageRequest; import com.koddy.server.member.presentation.request.SignUpMenteeRequest; import com.koddy.server.member.presentation.request.SignUpMentorRequest; +import com.koddy.server.member.presentation.request.model.LanguageRequestModel; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -60,7 +60,7 @@ void success() { MENTOR_1.getPlatform().getSocialId(), MENTOR_1.getPlatform().getEmail().getValue(), MENTOR_1.getName(), - new LanguageRequest( + new LanguageRequestModel( Language.Category.KR.getCode(), List.of( Language.Category.EN.getCode(), @@ -123,7 +123,7 @@ void success() { MENTEE_1.getPlatform().getEmail().getValue(), MENTEE_1.getName(), MENTEE_1.getNationality().code, - new LanguageRequest(Language.Category.KR.getCode(), List.of()), + new LanguageRequestModel(Language.Category.KR.getCode(), List.of()), MENTEE_1.getInterest().getSchool(), MENTEE_1.getInterest().getMajor() ); diff --git a/src/test/java/com/koddy/server/member/presentation/MenteeMainSearchApiTest.java b/src/test/java/com/koddy/server/member/presentation/MenteeMainSearchApiTest.java index 4be47468..e19fefe8 100644 --- a/src/test/java/com/koddy/server/member/presentation/MenteeMainSearchApiTest.java +++ b/src/test/java/com/koddy/server/member/presentation/MenteeMainSearchApiTest.java @@ -124,14 +124,14 @@ void success() { @Nested @DisplayName("멘토 둘러보기 API [GET /api/mentors]") - class GetMentorsByCondition { + class LookAroundMentorsByCondition { private static final String BASE_URL = "/api/mentors"; @Test @DisplayName("멘토들을 조건에 따라 둘러본다") void success() { // given - given(menteeMainSearchUseCase.getMentorsByCondition(any())).willReturn(new SliceResponse<>( + given(menteeMainSearchUseCase.lookAroundMentorsByCondition(any())).willReturn(new SliceResponse<>( List.of( new MentorSimpleSearchProfile( 3, diff --git a/src/test/java/com/koddy/server/member/presentation/MentorMainSearchApiTest.java b/src/test/java/com/koddy/server/member/presentation/MentorMainSearchApiTest.java index a985a4aa..068c333e 100644 --- a/src/test/java/com/koddy/server/member/presentation/MentorMainSearchApiTest.java +++ b/src/test/java/com/koddy/server/member/presentation/MentorMainSearchApiTest.java @@ -124,14 +124,14 @@ void success() { @Nested @DisplayName("멘티 둘러보기 API [GET /api/mentees]") - class GetMenteesByCondition { + class LookAroundMenteesByCondition { private static final String BASE_URL = "/api/mentees"; @Test @DisplayName("멘티들을 조건에 따라 둘러본다") void success() { // given - given(mentorMainSearchUseCase.getMenteesByCondition(any())).willReturn(new SliceResponse<>( + given(mentorMainSearchUseCase.lookAroundMenteesByCondition(any())).willReturn(new SliceResponse<>( List.of( new MenteeSimpleSearchProfile( 3, diff --git a/src/test/java/com/koddy/server/member/presentation/UpdateMenteeInfoApiTest.java b/src/test/java/com/koddy/server/member/presentation/UpdateMenteeInfoApiTest.java index c25a14f0..0061d790 100644 --- a/src/test/java/com/koddy/server/member/presentation/UpdateMenteeInfoApiTest.java +++ b/src/test/java/com/koddy/server/member/presentation/UpdateMenteeInfoApiTest.java @@ -6,8 +6,8 @@ import com.koddy.server.member.domain.model.Language; import com.koddy.server.member.domain.model.mentee.Mentee; import com.koddy.server.member.domain.model.mentor.Mentor; -import com.koddy.server.member.presentation.request.LanguageRequest; import com.koddy.server.member.presentation.request.UpdateMenteeBasicInfoRequest; +import com.koddy.server.member.presentation.request.model.LanguageRequestModel; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -43,7 +43,7 @@ class UpdateBasicInfo { MENTEE_1.getNationality().code, MENTEE_1.getProfileImageUrl(), MENTEE_1.getIntroduction(), - new LanguageRequest( + new LanguageRequestModel( Language.Category.KR.getCode(), List.of( Language.Category.EN.getCode(), diff --git a/src/test/java/com/koddy/server/member/presentation/UpdateMentorInfoApiTest.java b/src/test/java/com/koddy/server/member/presentation/UpdateMentorInfoApiTest.java index b352de7b..a92854ab 100644 --- a/src/test/java/com/koddy/server/member/presentation/UpdateMentorInfoApiTest.java +++ b/src/test/java/com/koddy/server/member/presentation/UpdateMentorInfoApiTest.java @@ -7,12 +7,12 @@ import com.koddy.server.member.domain.model.mentee.Mentee; import com.koddy.server.member.domain.model.mentor.Mentor; import com.koddy.server.member.presentation.request.End; -import com.koddy.server.member.presentation.request.LanguageRequest; import com.koddy.server.member.presentation.request.MentorScheduleRequest; -import com.koddy.server.member.presentation.request.MentoringPeriodRequest; import com.koddy.server.member.presentation.request.Start; import com.koddy.server.member.presentation.request.UpdateMentorBasicInfoRequest; import com.koddy.server.member.presentation.request.UpdateMentorScheduleRequest; +import com.koddy.server.member.presentation.request.model.LanguageRequestModel; +import com.koddy.server.member.presentation.request.model.MentoringPeriodRequestModel; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -50,7 +50,7 @@ class UpdateBasicInfo { MENTOR_1.getName(), MENTOR_1.getProfileImageUrl(), MENTOR_1.getIntroduction(), - new LanguageRequest( + new LanguageRequestModel( Language.Category.KR.getCode(), List.of( Language.Category.EN.getCode(), @@ -125,7 +125,7 @@ void success() { class UpdateSchedule { private static final String BASE_URL = "/api/mentors/me/schedules"; private final UpdateMentorScheduleRequest request = new UpdateMentorScheduleRequest( - new MentoringPeriodRequest( + new MentoringPeriodRequestModel( LocalDate.of(2024, 1, 1), LocalDate.of(2024, 5, 1) ), From a1447d990133b555dd4ba7840314dd294e7a6275 Mon Sep 17 00:00:00 2001 From: sjiwon Date: Mon, 26 Feb 2024 22:43:35 +0900 Subject: [PATCH 9/9] =?UTF-8?q?chore:=20SchedulerConfig=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/global/config/SchedulerConfig.kt | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/main/java/com/koddy/server/global/config/SchedulerConfig.kt diff --git a/src/main/java/com/koddy/server/global/config/SchedulerConfig.kt b/src/main/java/com/koddy/server/global/config/SchedulerConfig.kt new file mode 100644 index 00000000..8baea605 --- /dev/null +++ b/src/main/java/com/koddy/server/global/config/SchedulerConfig.kt @@ -0,0 +1,20 @@ +package com.koddy.server.global.config + +import org.springframework.context.annotation.Configuration +import org.springframework.scheduling.annotation.EnableScheduling +import org.springframework.scheduling.annotation.SchedulingConfigurer +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler +import org.springframework.scheduling.config.ScheduledTaskRegistrar + +@Configuration +@EnableScheduling +class SchedulerConfig : SchedulingConfigurer { + override fun configureTasks(taskRegistrar: ScheduledTaskRegistrar) { + val threadPool = ThreadPoolTaskScheduler().apply { + poolSize = 10 + setThreadNamePrefix("Scheduler Thread-") + initialize() + } + taskRegistrar.setTaskScheduler(threadPool) + } +}