-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Feat: 요약 및 문제 생성 API 구현 (#4) * Rename: AI Task 도메인 이름 변경 - llm 으로 변경 * Refactor: LLM 도메인 애플리케이션 계층과 프레젠테이션 계층 응답 분리 * Feat: LLM 작업 진행 상태 확인 기능 구현 * Feat: 요약 및 문제 결과 조회 기능 구현 * Feat: 요약 및 문제 생성 기능 구현 - AI 서버와 통신하는 부분 제외하고 기능 구현 - 임시 UUID 를 통해 task 저장 * Feat: LLM 서버 콜백 기능 구현 - LLM 서버가 API 콜을 통해 페이지별 요약 및 문제 내용 전달 - task id 를 통해 조회하여 요약 내용과 문제 내용 업데이트 * Refactor: 변수 이름 변경 - 필드명 카멜케이스로 변경 * Refactor: 통일성 없는 부분 수정 - 필드명 변경 - 변수 추출 * Refactor: 예외 종류, 메서드 네이밍 변경 - LLMQueryService 예외 타입 변경 - SummaryAndProblemUpdateResponse 메서드 네이밍 변경 * Refactor: LLMQueryService 응답과 LLMController 응답 분리 * Feat: 폴더 관련 기능 구현 (#6) * Init: 프로젝트 기본설정 세팅 - 프로젝트 생성 - .gitignore설정 - 프로젝트 의존성 추가 - application.yml 설정파일 구성 * Init: 프로젝트 기본 구조 및 공통 컴포넌트 설정 - 공통 설정 클래스 추가 (JPA, QueryDSL, Swagger, Web) - 공통 도메인 엔티티 (RootEntity) 정의 - 예외 처리 관련 클래스 및 타입 구현 - JSON 변환을 위한 AttributeConverter 추가 - 유틸리티 클래스 (Math) 추가 * Chore: Folder 도메인 폴더 구조 셋업 폴더 구조 셋업 작업 * Feat: Folder 도메인의 엔티티 생성 엔티티 생성자, 부모-자식간 연결로직 생성 * refactor: 자기 참조 관계 설정 수정 기존, 다대일 양방향 관계에서 다대일 단방향 관계로 설정하고, 삭제 등의 이슈 발생시 Service 계층에서 함수의 재귀사용을 통해 삭제할 예정 * Chore: Document 도메인 폴더 구조 셋업 폴더 구조 셋업 및 엔티티 생성 * Feat: Lombok 라이브러리 활용하여 기본 생성자 생성 기본 생성자 생성 lombok 라이브러리 활용하여 대체 * chore: name 필드의 length 50으로 설정 name 필드 (Document, Folder) 의 length = 50 으로 설정 * chore: Domain 계층의 Repository가 QueryRepository 상속받도록 함 상속 작업 수행 * chore: Member 도메인 매핑 작업 수행 Member 도메인 매핑 작업 수행 * chore: Member 도메인과 Folder 도메인 연결 작업 수행 Member 도메인과 Folder 도메인 연결 작업 수행 * feat: 루트 폴더 생성하는 기능 구현 루트 폴더 생성하는 기능 구현 * feat: 서브폴더 생성하는 기능 구현 서브 폴더 생성하는 기능 구현 * feat: 폴더를 루트로 이동시키는 기능 구현 폴더를 루트로 이동시키는 기능 구현 * feat: 새로운 폴더 내부로 이동시키는 기능 구현 새로운 폴더 내부로 이동시키는 기능 구현 * feat: 계층형 구조의 폴더 탐색 기능 구현 계층형 구조의 폴더 탐색 기능 구현 * test: 재귀적으로 폴더를 조회하는 테스트 코드 작성 재귀적으로 폴더 조회하는 테스트코드 작성 * remove: 사용하지 않는 QueryDSL 관련 파일 삭제 사용하지 않는 QueryDSL 관련 파일 삭제 * refactor: formatting 적용 formatting 적용 * feat: 폴더 재귀적으로 삭제하는 기능 구현 폴더 재귀적으로 삭제하는 기능 구현 * feat: @onDelete 어노테이션을 사용하여 삭제 기능 구현 삭제 기능 구현 * feat: 폴더 구조의 조회를 간편하게 개선 폴더 구조의 조회 간편하게 개선 * feat: 루트에 폴더를 생성하는 API 구현 루트에 폴더를 생성하는 API 구현 * feat: 서브 폴더를 생성하는 API 구현 서브 폴더 생성하는 API 구현 * feat: 폴더 이동하는 API 구현 폴더 이동하는 API 구현 * refactor: 중복된 함수 기능 병합 작업 수행 중복된 함수 기능 병합 작업 수행 * feat: 폴더 조회 API 구현 폴더 조회 API 구현 * feat: 폴더 삭제 API 구현 폴더 삭제 API 구현 * rename: 함수명 변경 함수 명 변경 * refactor: 메서드 분리 작업 수행 메서드 분리 작업 수행 * refactor: Delete API 204 로 반환 204로 반환 * feat: 요청마다 DTO를 다르게 설정 요청마다 DTO 다르게 설정 * refactor: 타입추론방식에서 타입명시방식으로 변경 타입명시방식으로 코드 스타일 변경 * refactor: 도메인 값에 대한 검증은 도메인계층으로 옮김 도메인 계층으로 값에 대한 검증 이동 * refactor: Owner가 아닌 폴더에 접근하려고 하는 경우 NotFoundException 예외 발생 예외 발생 --------- Co-authored-by: rladbrua0207 <[email protected]> * Style: 코드 포맷팅 통일 * Refactor: 예외 종류 변경 --------- Co-authored-by: 윤정훈 <[email protected]> Co-authored-by: rladbrua0207 <[email protected]>
- Loading branch information
1 parent
31cf7a8
commit ad9062e
Showing
42 changed files
with
438 additions
and
128 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,7 @@ | ||
package notai.auth; | ||
|
||
public record TokenPair(String accessToken, String refreshToken) { | ||
public record TokenPair( | ||
String accessToken, | ||
String refreshToken | ||
) { | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
25 changes: 25 additions & 0 deletions
25
src/main/java/notai/folder/application/FolderQueryService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,9 +1,34 @@ | ||
package notai.folder.application; | ||
|
||
import lombok.RequiredArgsConstructor; | ||
import notai.folder.application.result.FolderFindResult; | ||
import notai.folder.domain.Folder; | ||
import notai.folder.domain.FolderRepository; | ||
import org.springframework.stereotype.Service; | ||
|
||
import java.util.List; | ||
|
||
@Service | ||
@RequiredArgsConstructor | ||
public class FolderQueryService { | ||
|
||
private final FolderRepository folderRepository; | ||
|
||
public List<FolderFindResult> getFolders(Long memberId, Long parentFolderId) { | ||
List<Folder> folders = getFoldersWithMemberAndParent(memberId, parentFolderId); | ||
// document read | ||
return folders.stream().map(this::getFolderResult).toList(); | ||
} | ||
|
||
private List<Folder> getFoldersWithMemberAndParent(Long memberId, Long parentFolderId) { | ||
if (parentFolderId == null) { | ||
return folderRepository.findAllByMemberIdAndParentFolderIsNull(memberId); | ||
} | ||
return folderRepository.findAllByMemberIdAndParentFolderId(memberId, parentFolderId); | ||
} | ||
|
||
private FolderFindResult getFolderResult(Folder folder) { | ||
Long parentFolderId = folder.getParentFolder() != null ? folder.getParentFolder().getId() : null; | ||
return FolderFindResult.of(folder.getId(), parentFolderId, folder.getName()); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,9 +1,69 @@ | ||
package notai.folder.application; | ||
|
||
import lombok.RequiredArgsConstructor; | ||
import notai.common.exception.type.BadRequestException; | ||
import notai.folder.application.result.FolderMoveResult; | ||
import notai.folder.application.result.FolderSaveResult; | ||
import notai.folder.domain.Folder; | ||
import notai.folder.domain.FolderRepository; | ||
import notai.folder.presentation.request.FolderMoveRequest; | ||
import notai.folder.presentation.request.FolderSaveRequest; | ||
import notai.member.domain.Member; | ||
import notai.member.domain.MemberRepository; | ||
import org.springframework.stereotype.Service; | ||
|
||
@Service | ||
@RequiredArgsConstructor | ||
public class FolderService { | ||
|
||
private final FolderRepository folderRepository; | ||
private final MemberRepository memberRepository; | ||
|
||
public FolderSaveResult saveRootFolder(Long memberId, FolderSaveRequest folderSaveRequest) { | ||
Member member = memberRepository.getById(memberId); | ||
Folder folder = new Folder(member, folderSaveRequest.name()); | ||
Folder savedFolder = folderRepository.save(folder); | ||
return getFolderSaveResult(savedFolder); | ||
} | ||
|
||
public FolderSaveResult saveSubFolder(Long memberId, FolderSaveRequest folderSaveRequest) { | ||
Member member = memberRepository.getById(memberId); | ||
Folder parentFolder = folderRepository.getById(folderSaveRequest.parentFolderId()); | ||
Folder folder = new Folder(member, folderSaveRequest.name(), parentFolder); | ||
Folder savedFolder = folderRepository.save(folder); | ||
return getFolderSaveResult(savedFolder); | ||
} | ||
|
||
public FolderMoveResult moveRootFolder(Long memberId, Long id) { | ||
Folder folder = folderRepository.getById(id); | ||
folder.validateOwner(memberId); | ||
folder.moveRootFolder(); | ||
folderRepository.save(folder); | ||
return getFolderMoveResult(folder); | ||
} | ||
|
||
public FolderMoveResult moveNewParentFolder(Long memberId, Long id, FolderMoveRequest folderMoveRequest) { | ||
Folder folder = folderRepository.getById(id); | ||
Folder parentFolder = folderRepository.getById(folderMoveRequest.targetFolderId()); | ||
folder.validateOwner(memberId); | ||
folder.moveNewParentFolder(parentFolder); | ||
folderRepository.save(folder); | ||
return getFolderMoveResult(folder); | ||
} | ||
|
||
public void deleteFolder(Long memberId, Long id) { | ||
if (!folderRepository.existsByMemberIdAndId(memberId, id)) { | ||
throw new BadRequestException("올바르지 않은 요청입니다."); | ||
} | ||
folderRepository.deleteById(id); | ||
} | ||
|
||
private FolderSaveResult getFolderSaveResult(Folder folder) { | ||
Long parentFolderId = folder.getParentFolder() != null ? folder.getParentFolder().getId() : null; | ||
return FolderSaveResult.of(folder.getId(), parentFolderId, folder.getName()); | ||
} | ||
|
||
private FolderMoveResult getFolderMoveResult(Folder folder) { | ||
return FolderMoveResult.of(folder.getId(), folder.getName()); | ||
} | ||
} |
11 changes: 11 additions & 0 deletions
11
src/main/java/notai/folder/application/result/FolderFindResult.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package notai.folder.application.result; | ||
|
||
public record FolderFindResult( | ||
Long id, | ||
Long parentId, | ||
String name | ||
) { | ||
public static FolderFindResult of(Long id, Long parentId, String name) { | ||
return new FolderFindResult(id, parentId, name); | ||
} | ||
} |
10 changes: 10 additions & 0 deletions
10
src/main/java/notai/folder/application/result/FolderMoveResult.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
package notai.folder.application.result; | ||
|
||
public record FolderMoveResult( | ||
Long id, | ||
String name | ||
) { | ||
public static FolderMoveResult of(Long id, String name) { | ||
return new FolderMoveResult(id, name); | ||
} | ||
} |
11 changes: 11 additions & 0 deletions
11
src/main/java/notai/folder/application/result/FolderSaveResult.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package notai.folder.application.result; | ||
|
||
public record FolderSaveResult( | ||
Long id, | ||
Long parentId, | ||
String name | ||
) { | ||
public static FolderSaveResult of(Long id, Long parentId, String name) { | ||
return new FolderSaveResult(id, parentId, name); | ||
} | ||
} |
Oops, something went wrong.