Skip to content

Commit

Permalink
✨ /users/my API (#31)
Browse files Browse the repository at this point in the history
  • Loading branch information
waterfogSW authored Oct 20, 2024
1 parent b9df48e commit 5856e33
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package com.threedays.bootstrap.api.support.security

import com.threedays.application.auth.config.AuthProperties
import com.threedays.domain.auth.entity.AccessToken
import com.threedays.domain.auth.vo.UserAuthentication
import com.threedays.support.common.security.SecurityContext
import com.threedays.support.common.security.SecurityContextHolder
import jakarta.servlet.FilterChain
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.threedays.domain.auth.vo
package com.threedays.bootstrap.api.support.security

import com.threedays.domain.user.entity.User
import com.threedays.support.common.security.Authentication
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.threedays.bootstrap.api.support.security

import com.threedays.support.common.security.SecurityContext
import com.threedays.support.common.security.SecurityContextHolder

fun <T> withUserAuthentication(block: (UserAuthentication) -> T): T {
val securityContext: SecurityContext<UserAuthentication>? =
SecurityContextHolder.getContext()

val userAuthentication: UserAuthentication = securityContext?.authentication
?: throw IllegalStateException("User is not authenticated")

return block(userAuthentication)
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,20 @@
package com.threedays.bootstrap.api.user

import com.threedays.application.user.port.inbound.RegisterUser
import com.threedays.bootstrap.api.support.security.withUserAuthentication
import com.threedays.domain.auth.vo.PhoneNumber
import com.threedays.domain.user.entity.JobOccupation
import com.threedays.domain.user.entity.User
import com.threedays.domain.user.entity.UserDesiredPartner
import com.threedays.domain.user.repository.UserRepository
import com.threedays.domain.user.vo.Gender
import com.threedays.oas.api.UsersApi
import com.threedays.oas.model.GetMyUserInfoResponse
import com.threedays.oas.model.RegisterUserRequest
import com.threedays.oas.model.TokenResponse
import com.threedays.oas.model.UserProfile
import com.threedays.support.common.base.domain.UUIDTypeId
import com.threedays.support.common.exception.NotFoundException
import org.springframework.http.HttpStatus
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.RestController
Expand All @@ -19,6 +23,7 @@ import java.time.Year
@RestController
class UserController(
private val registerUser: RegisterUser,
private val userRepository: UserRepository,
) : UsersApi {

override fun registerUser(
Expand Down Expand Up @@ -55,8 +60,41 @@ class UserController(
}
}

override fun getMyUserInfo(): ResponseEntity<GetMyUserInfoResponse> {
// TODO: Implement this method
throw NotImplementedError()
}
override fun getMyUserInfo(): ResponseEntity<GetMyUserInfoResponse> =
withUserAuthentication { userAuthentication ->
val user: User = userRepository
.find(userAuthentication.userId)
?: throw NotFoundException("User not found")

GetMyUserInfoResponse(
id = user.id.value,
name = user.name.value,
phoneNumber = user.phoneNumber.value,
profile = UserProfile(
gender = com.threedays.oas.model.Gender.valueOf(user.profile.gender.name),
birthYear = user.profile.birthYear.value,
companyId = user.profile.company.id.value,
jobOccupation = user.profile.jobOccupation.name.let {
com.threedays.oas.model.JobOccupation.valueOf(
it
)
},
locationIds = user.profile.locations.map { it.id.value },
),
desiredPartner = com.threedays.oas.model.UserDesiredPartner(
jobOccupations = user.desiredPartner.jobOccupations.map {
com.threedays.oas.model.JobOccupation.valueOf(
it.name
)
},
birthYearRange = user.desiredPartner.birthYearRange?.let {
com.threedays.oas.model.BirthYearRange(
it.start.value,
it.endInclusive.value
)
},
preferDistance = com.threedays.oas.model.PreferDistance.valueOf(user.desiredPartner.preferDistance.name),
)
).let { ResponseEntity.ok(it) }
}
}

0 comments on commit 5856e33

Please sign in to comment.