-
Notifications
You must be signed in to change notification settings - Fork 1
Conversation
Controller 계층 관련 * LanguageController (new) - 사용자가 등록한 언어 레벨 변경 요청을 받을 `modifyLanguageLevel` 메소드 추가 Service 계층 관련 * LanguageService (new) - 언어 레벨 변경 요청에 대한 로직을 처리할 `modifyLevel` 메소드 추가 1. 등록된 언어 status 가 `모국어(NATIVE)` 인 언어들의 경우에는 레벨 변경이 불가능 (예외) 2. 필요시 여러 개의 언어레벨 변경 요청을 한번에 받아 처리해야 `@Transactional` annotation 추가 Mapper 계층 관련 * LanguageMapper - 서비스 계층에서 처리한 언어레벨 변경에 대한 요청을 DB에 반영하기 위한 `updateLevel` 메소드 작성 * LangaugeMapper.xml - 위의 메소드를 처리하기 위한 Query 추가 application.properties * Mybatis가 한 번에 여러 요청을 처리할 수 있도록 `allowMultipleQueries` 속성값 true 추가 테스트 관련 - 위에서 작성한 로직을 통합 테스트 할 클래스 추가 - 포스트맨을 활용해 구현한 로직 테스트
@@ -27,4 +27,13 @@ | |||
SELECT langId, level FROM speak | |||
WHERE userId = #{userId} | |||
</select> | |||
|
|||
<update id="updateLevel" parameterType="map"> | |||
<foreach collection="langNewLevel" item="lang" separator=";"> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이렇게하면 UPDATE 구문이 여러개가 실행될텐데 구문 한개로 같이 실행시킬 수 있는 방법은 없을까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
조언주신대로 update ~ case when ~ then
을 이용해서 하나로 실행시키도록 변경하였습니다.
@@ -18,4 +18,10 @@ public void addLanguages(@CurrentUser String userId, @RequestBody LanguageDataWr | |||
|
|||
languageService.addLanguages(userId, languageDataWrapper.getDataList(), languageDataWrapper.getStatus()); | |||
} | |||
|
|||
@PutMapping | |||
public void modifyLanguageLevel(@CurrentUser String userId, @RequestBody LanguageDataWrapper languageDataWrapper) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
여기서 LanguageDataWrapper
는 Request용 클래스이니까 DataWrapper
보다는 LanguageModifyRequest
이런거로 해주는게 낫지 않을까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LanguageDataWrapper
클래스가 add/modify
시 모두 사용되는 점에 착안해서 LanguageUpsertRequest
로 변경하였습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
Controller 계층 관련 * AlarmController - 개별 알람 읽기 요청을 매핑할 `readAlarm` 메소드 추가 Service 계층 관련 * AlarmService - 개별 알람 읽기 요청에 대한 비즈니스 로직을 처리할 `readAlarm` 메소드 추가 - 알람이 존재하지 않는 경우 예외 발생 - 처음 알람을 읽을 때만 `hasRead` 값을 `Y`로 변경 Mapper 계층 관련 * AlarmMapper - DB에서 개별 알람을 가져 올 `getAlarm` 메소드 추가 - 개별 알람을 읽은 경우 읽기 상태를 `Y`로 업데이트 하는 `updateToRead` 메소드 추가 * AlarmMapper.xml - 위의 내용을 처리할 쿼리 추가 예외 관련 * NoSuchAlarmException 클래스 추가 - 요청한 알람이 존재하지 않는 예외를 표시하기 위한 `NoSuchAlarmException` 클래스 추가 * ExceptionHandler에 예외 매핑 - 예외 제목과 메시지를 매핑 후 예외가 발생하면 상태코드 `404(Not Found)`를 리턴하도록 설정 테스트 관련 * AlarmServiceTest 추가 - 위의 로직을 테스트할 단위 테스트 작성 * 전체적인 로직을 포스트맨을 사용해 테스트
* AlarmService - 기존 로직: 테이블에서 한 row를 불러와 해당 알람에 대한 읽기 상태가 'N' 인경우 'Y'로 업데이트 후 리턴 - 문제점: DB에 업데이트 반영 후 업데이트 전 객체를 리턴하므로 hasRead 업데이트는 그 다음 읽어오기부터 반영도미 - 수정된 로직 1. 읽기 상태를 먼저 살펴본 다음 존재 하지 않으면 예외 처리 2. 존재하고 읽기 상태가 'N'인 경우만 'Y'로 업데이트 3. 해당 알람을 리턴 - 읽기 상태를 리턴하는 대신 존재여부를 불린으로 리턴하는 경우 hasRead 상태 값이 체크되지 않아서 이전에 읽었던 읽지 않았던 'Y'로 업데이트 하는 문제가 있었습니다. - 때문에 읽기 상태를 처음에 리턴하는 것으로 알람의 존재여부와 상태값을 모두 체크함으로써 이 문제를 해결하였습니다. * 테스트에 로직 업데이트 내역 반영 및 테스트 구동/확인
* AlarmService - 기존 로직: 테이블에서 한 row를 불러와 해당 알람에 대한 읽기 상태가 'N' 인경우 'Y'로 업데이트 후 리턴 - 문제점: DB에 업데이트 반영 후 업데이트 전 객체를 리턴하므로 hasRead 업데이트는 그 다음 읽어오기부터 반영도미 - 수정된 로직 1. 읽기 상태를 먼저 살펴본 다음 존재 하지 않으면 예외 처리 2. 존재하고 읽기 상태가 'N'인 경우만 'Y'로 업데이트 3. 해당 알람을 리턴 - 읽기 상태를 리턴하는 대신 존재여부를 불린으로 리턴하는 경우 hasRead 상태 값이 체크되지 않아서 이전에 읽었던 읽지 않았던 'Y'로 업데이트 하는 문제가 있었습니다. - 때문에 읽기 상태를 처음에 리턴하는 것으로 알람의 존재여부와 상태값을 모두 체크함으로써 이 문제를 해결하였습니다. * 테스트에 로직 업데이트 내역 반영 및 테스트 구동/확인
Controller 계층 관련
LanguageController (new)
modifyLanguageLevel
메소드 추가Service 계층 관련
LanguageService (new)
modifyLevel
메소드 추가등록된 언어 status 가
모국어(NATIVE)
인 언어들의 경우에는 레벨변경이 불가능 (예외)
필요시 여러 개의 언어레벨 변경 요청을 한번에 받아 처리해야
@Transactional
annotation 추가Mapper 계층 관련
LanguageMapper
updateLevel
메소드 작성LangaugeMapper.xml
application.properties
allowMultipleQueries
속성값 true추가
테스트 관련
위에서 작성한 로직을 통합 테스트 할 클래스 추가
포스트맨을 활용해 구현한 로직 테스트