TIL ~ 24.04.05
20240219 TIL
wlsds00_
2024. 2. 29. 06:47
대용량 트래픽 프로젝트
로그인 / 인증기능까지 강의를 다시 참고해서 1차적으로 작성하였다.
예외처리의 경우 임시로 작성해두었고 나중에 통일된 형식으로 처리하기로 했다.
refresh token 관련 부분을 적용해보고 싶어서 찾아보는데 음...
개념부터 잘 이해가 안 되는 것 같다.
자료를 보고 적용해서 테이블에 토큰 저장까지는 테스트에 성공을 했는데 이걸 어떻게 활용해야 할지 모르겠다.
AdminController
@RestController
@RequestMapping("/api/admins")
class AdminController(
private val adminService: AdminService
) {
@PostMapping("/signup")
fun signUp(@RequestBody request: SignUpWithLoginRequest, email: String): ResponseEntity<SignUpResponse> {
return ResponseEntity.status(HttpStatus.CREATED).body(adminService.signUp(email, request))
}
@PostMapping("/login")
fun signIn(@RequestBody request: SignUpWithLoginRequest): ResponseEntity<LoginResponse> {
return ResponseEntity.status(HttpStatus.OK).body(adminService.login(request))
}
}
AdminRepository
interface AdminRepository: JpaRepository<Admin, Long> {
fun findByEmail(email: String): Admin?
}
AdminServiceImpl
@Service
class AdminServiceImpl(
private val adminRepository: AdminRepository
) : AdminService {
@Transactional
override fun signUp(email: String, request: SignUpWithLoginRequest): SignUpResponse {
val admin = Admin (
email = request.email,
password = request.password
)
adminRepository.save(admin)
return SignUpResponse(email)
}
@Transactional
override fun login(request: SignUpWithLoginRequest): LoginResponse {
val admin = adminRepository.findByEmail(request.email) ?: throw IllegalArgumentException("해당 이메일은 존재하지 않습니다.")
if (admin.password != request.password) {
throw IllegalArgumentException("비밀번호가 일치하지 않습니다.")
}
return LoginResponse(email = admin.email)
}
}
마무리
이전에도 느낀거지만, 코드를 좀 관성적으로 짜는 것 같다.
생각을 하고 왜 이렇게 사용했는가? 를 좀더 고려해봐야 할것같다.