Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
고민과정 - 삭제된 일기 복구 기능 추가 ⭐️⭐️
크게 두 가지로 고민했습니다.
첫 번째는 데이터베이스를 하나 더 만들어 임시 저장소 처럼 사용하는 방법입니다. 삭제가 되더라도 다른 파일에는 저장되어 있어 불러올 수 있도록 하는 방법입니다.
두 번째는 실제로 삭제가 되지는 않았지만 삭제가 된 것처럼 보이게 하는 방법입니다. 문득 컴퓨터에서 파일 관리를 할 때 휴지통에서 삭제된 파일을 복구하는 것이 생각나, 이 원리에 대해 조사해보았습니다.
첫 번째 방법은 많이 번거로울 것 같아 두 번째 방법으로 구현해보았습니다. 두 번째 방법은 데이터가 계속 축적되기 때문에 불필요한 데이터가 남아있을 수도 있다는 단점이 있으나, 저장하는 데이터가 큰 용량이 아니기 때문에 성능에 있어 별 영향이 가지 않을 것으로 판단하였습니다.
구현내용 - 삭제된 일기 복구 기능 추가 ⭐️⭐️
[Diary]
다이어리 클래스에
private boolean isDeleted = false;
를 추가하여 삭제 여부를 관리할 수 있도록 하였습니다.또한, 아래와 같은 isDeleted의 getter와 setter를 추가하였습니다.
[DiaryRepository]
private final Map<Long, Diary> storage = new ConcurrentHashMap<>();
처럼 String을 Diary로 변경하였습니다.(isDeleted에 접근하기 위해)이부분을 그대로 String 타입으로 두고 수정해보려 했으나.. 잘 되지 않아 결국 다른 함수들까지 다 바꿔주었습니다.
save와 update 메서드에서는
setDeleted(false)
를 해주고,delete는 setDeleted(true)
를 해주었습니다.findAll 메서드에서는
다음과 같이 조건문을 추가해 isDeleted가 true인 diary는 보이지 않게 했습니다.
마지막으로
restore 메서드를 추가해 데이터를 복구하는 로직을 구현했습니다.
고민과정 - 일기 수정 일일 2회 제한 기능 추가 ⭐️⭐️
기획서의 질답을 보고 힌트를 얻었습니다. LocalDateTime 클래스의 메소드를 활용하여 다음날이 되면 초기화되도록 구현하려했습니다.
구현내용 - 일기 수정 일일 2회 제한 기능 추가 ⭐️⭐️
[Diary]
위와 같이 코드를 추가해주고, 각각의 getter와 setter도 추가했습니다.
[DiaryRepository]
저는 이 부분에서 많이 시간을 할애했습니다. 아래와 같은 코드를 짰는데
예외가 처리되지 않아 무엇이 문제인지 한참을 찾다가 diary 부분에 new로 할당되고 있음을 깨달았습니다.
그래서 diary 클래스에 editCount를 넣지 않고 DiaryRepository에 updateCount를 넣어 다시 아래와 같은 조건문을 만들었습니다.