Skip to content

Commit

Permalink
Feat: Member API Dto validate (#47)
Browse files Browse the repository at this point in the history
* feat: member api req validation

* fix: 위경도 유효성검사 추가
  • Loading branch information
Donghyeon0908 authored Sep 20, 2024
1 parent 5278b7e commit eea9eef
Show file tree
Hide file tree
Showing 6 changed files with 61 additions and 18 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.inner.circle.o2oserver.member.presentation.api

import jakarta.validation.Valid
import org.inner.circle.o2oserver.commons.response.BaseResponse
import org.inner.circle.o2oserver.member.application.MemberInfoFacade
import org.inner.circle.o2oserver.member.presentation.dto.AddressIdResponse
Expand Down Expand Up @@ -50,7 +51,7 @@ class AddressController(

@PostMapping
override fun createAddress(
@RequestBody createRequest: AddressRequest.CreateAddress,
@RequestBody @Valid createRequest: AddressRequest.CreateAddress,
@AuthenticationPrincipal userDetails: UserDetails,
): BaseResponse<AddressIdResponse> {
val memberId = userDetails.username
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.inner.circle.o2oserver.member.presentation.api

import jakarta.validation.Valid
import org.inner.circle.o2oserver.commons.response.BaseResponse
import org.inner.circle.o2oserver.member.application.MemberInfoFacade
import org.inner.circle.o2oserver.member.presentation.dto.MemberIdResponse
Expand Down Expand Up @@ -40,7 +41,7 @@ class MemberInfoController(

@PostMapping
override fun createMemberInfo(
@RequestBody createRequest: MemberRequest.MemberInfo,
@RequestBody @Valid createRequest: MemberRequest.MemberInfo,
@AuthenticationPrincipal userDetails: UserDetails,
): BaseResponse<Any> {
val memberId = userDetails.username
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.inner.circle.o2oserver.member.presentation.api

import jakarta.validation.Valid
import org.inner.circle.o2oserver.member.application.LoginFacade
import org.inner.circle.o2oserver.member.presentation.dto.LoginRequest
import org.inner.circle.o2oserver.member.presentation.dto.LoginResponse
Expand All @@ -22,7 +23,7 @@ class MemberLoginController(

@PostMapping
override fun loginMember(
@RequestBody loginRequest: LoginRequest.Login,
@RequestBody @Valid loginRequest: LoginRequest.Login,
): ResponseEntity<LoginResponse> {
log.info("login 요청")
val member = LoginRequest.Login.toMember(loginRequest)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,29 @@
package org.inner.circle.o2oserver.member.presentation.dto

import jakarta.validation.constraints.DecimalMax
import jakarta.validation.constraints.DecimalMin
import jakarta.validation.constraints.NotBlank
import jakarta.validation.constraints.Pattern
import org.inner.circle.o2oserver.member.domain.Address

class AddressRequest {
data class CreateAddress(
val address: String,
val addressDetail: String,
val latitude: Double,
val longitude: Double,
val zipCode: String,
@field:NotBlank(message = "Address cannot be blank") val address: String,
@field:NotBlank(message = "Address detail cannot be blank") val addressDetail: String,
@field:DecimalMin(
value = "33.0",
inclusive = true,
message = "Latitude must be at least 33.0",
) @field:DecimalMax(value = "39.0", inclusive = true, message = "Latitude must be at most 39.0") val latitude: Double,
@field:DecimalMin(
value = "124.0",
inclusive = true,
message = "Longitude must be at least 124.0",
) @field:DecimalMax(value = "132.0", inclusive = true, message = "Longitude must be at most 132.0") val longitude: Double,
@field:NotBlank(message = "Zip code cannot be blank") @field:Pattern(
regexp = "\\d{5}(?:-\\d{4})?",
message = "ZipCode must be a valid format (e.g., 12345 or 12345-6789)",
) val zipCode: String,
) {
companion object {
fun toAddress(createAddress: CreateAddress, memberId: String): Address {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package org.inner.circle.o2oserver.member.presentation.dto

import jakarta.validation.constraints.NotBlank
import org.inner.circle.o2oserver.member.domain.Member

class LoginRequest {
data class Login(
val snsType: String,
val subId: String,
val name: String,
@field:NotBlank(message = "SNS type cannot be blank") val snsType: String,
@field:NotBlank(message = "Sub ID cannot be blank") val subId: String,
@field:NotBlank(message = "Name cannot be blank") val name: String,
) {
companion object {
fun toMember(login: Login): Member {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,23 @@
package org.inner.circle.o2oserver.member.presentation.dto

import jakarta.validation.Valid
import jakarta.validation.constraints.DecimalMax
import jakarta.validation.constraints.DecimalMin
import jakarta.validation.constraints.NotBlank
import jakarta.validation.constraints.NotNull
import jakarta.validation.constraints.Pattern
import org.inner.circle.o2oserver.member.domain.Address
import org.inner.circle.o2oserver.member.domain.MemberDetail

class MemberRequest {
data class MemberInfo(val nickName: String, val contact: String, val address: AddressRequest) {
data class MemberInfo(
@field:NotBlank(message = "NickName cannot be blank") val nickName: String,
@field:NotBlank(message = "Contact cannot be blank") @field:Pattern(
regexp = "\\d{2,3}-?\\d{3,4}-?\\d{4}",
message = "Contact must be a valid format (e.g., 01012345678, 010-123-4567, 011-2345-6789)",
) val contact: String,
@field:NotNull(message = "Address cannot be null") @field:Valid val address: AddressRequest,
) {
companion object {
fun toMemberDetail(memberInfo: MemberInfo, memberId: String): MemberDetail {
return MemberDetail(
Expand All @@ -20,19 +33,30 @@ class MemberRequest {
address = memberInfo.address.address,
addressDetail = memberInfo.address.addressDetail,
latitude = memberInfo.address.latitude,
longitude = memberInfo.address.longitude,
longitude = memberInfo.address.longitude!!,
zipCode = memberInfo.address.zipCode,
isDefault = true, // 기본 주소로 설정
)
}
}

data class AddressRequest(
val address: String,
val addressDetail: String,
val latitude: Double,
val longitude: Double,
val zipCode: String,
@field:NotBlank(message = "Address cannot be blank") val address: String,
@field:NotBlank(message = "Address detail cannot be blank") val addressDetail: String,
@field:DecimalMin(
value = "33.0",
inclusive = true,
message = "Latitude must be at least 33.0",
) @field:DecimalMax(value = "39.0", inclusive = true, message = "Latitude must be at most 39.0") val latitude: Double,
@field:DecimalMin(
value = "124.0",
inclusive = true,
message = "Longitude must be at least 124.0",
) @field:DecimalMax(value = "132.0", inclusive = true, message = "Longitude must be at most 132.0") val longitude: Double,
@field:NotBlank(message = "Zip code cannot be blank") @field:Pattern(
regexp = "\\d{5}(?:-\\d{4})?",
message = "ZipCode must be a valid format (e.g., 12345 or 12345-6789)",
) val zipCode: String,
)
}
}

0 comments on commit eea9eef

Please sign in to comment.