Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
374d8fa
feat : 필터 추가 ( 추후 추가 및 수정 가능성 있음)
ggamnunq Oct 15, 2025
53c2718
feat : fast api 에서 받아올 DTO 생성
ggamnunq Oct 15, 2025
7a74e6d
feat : 자연어 검색 api 일부 구현
ggamnunq Oct 18, 2025
a16d346
feat : 테이블 구조 일부 수정
ggamnunq Oct 18, 2025
9dac377
Merge pull request #21 from SW-DiffLens/feat#20
ggamnunq Oct 18, 2025
af3e943
feat : json -> Panel & RawData 저장 기능(관리자용) 구현
ggamnunq Oct 21, 2025
a444d68
feat : panelId -> rawData -> dto 반환하는 service 코드 작성
ggamnunq Oct 21, 2025
21648a6
feat: 검색기록 테이블과 라이브러리 테이블 관계 수정
hardwoong Oct 21, 2025
c2693d8
feat: 태그 필드 배열 형태로 수정
hardwoong Oct 21, 2025
9a2e134
feat: 라이브러리 생성 기능 구현
hardwoong Oct 21, 2025
adbd5df
feat : 권한 관련 인증로직 수정 & 초기 데이터 초기화 추상화
ggamnunq Oct 21, 2025
0b12c44
feat: 라이브러리 목록 조회 기능 구현
hardwoong Oct 21, 2025
9135297
feat : 서버 실행 시점에 PlanEnum -> Plan 데이터 DB에 추가하는 Initializer 작성
ggamnunq Oct 21, 2025
bba0f47
Merge pull request #24 from SW-DiffLens/feat#22
ggamnunq Oct 21, 2025
270cb6c
feat: 라이브러리 엔티티에 패널 아이디 추가
hardwoong Oct 22, 2025
bac6e53
refact: 엔티티 변경에 따른 생성 시 초기화 필드 변경
hardwoong Oct 22, 2025
e37ec29
feat: 라이브러리 병합 기능 구현
hardwoong Oct 22, 2025
e433f52
refact: CurrentUserService 사용 및 업데이트 시각 기록 로직 수정
hardwoong Oct 22, 2025
72a81ca
Merge pull request #25 from SW-DiffLens/feat#23
hardwoong Oct 22, 2025
20d7f8b
feat : 온보딩 과정 포함
ggamnunq Oct 22, 2025
6dd4690
Merge pull request #27 from SW-DiffLens/feat#26
ggamnunq Oct 22, 2025
a6c9c67
feat : 검색기록에 일치율 반영
ggamnunq Oct 22, 2025
0ae4127
feat : offset limit 기반 페이지 정보 dto 추가
ggamnunq Oct 22, 2025
651e5ed
feat : 개별응답 API 구현
ggamnunq Oct 22, 2025
ffc659f
feat : 자연어 요청 dto에서 질문 모드 필드 string -> enum 변경
ggamnunq Oct 22, 2025
50976ab
feat: 특정 패널 상세 조회 기능 구현
hardwoong Oct 23, 2025
6a46f3e
feat: 패널 테이블 특정 필드들 추가 및 추가에 따른 조회 기능 응답값 수정
hardwoong Oct 23, 2025
d5207a0
Merge pull request #30 from SW-DiffLens/feat#29
hardwoong Oct 23, 2025
ab55e53
refact : 개별 데이터 RawData 통해 조회 -> Panel 통해 조회하는 방식으로 변경
ggamnunq Oct 23, 2025
5a32e9b
Merge pull request #32 from SW-DiffLens/feat#28
ggamnunq Oct 23, 2025
9ae8912
refact : 자연어 검색 관련 fast api dto 재구성
ggamnunq Oct 23, 2025
84b43a3
feat : 서브 서버와의 연동을 위한 준비
ggamnunq Oct 23, 2025
0c86ab7
fix : fast api 호출하여 클라이언트에게 정상적으로 응답을 보내도록 수정
ggamnunq Oct 24, 2025
8b6e122
feat : fast api에 요청 보낼 dto 생성 (필드 미작성)
ggamnunq Oct 24, 2025
0a5f2fa
Merge pull request #34 from SW-DiffLens/feat#33
ggamnunq Oct 24, 2025
b075bc5
feat: 특정 라이브러리 상세 조회 기능 구현
hardwoong Oct 24, 2025
17da1c7
Merge pull request #37 from SW-DiffLens/feat#36
hardwoong Oct 24, 2025
e0629e1
refactor : 검색 api 개선
ggamnunq Oct 24, 2025
cce8ac6
docs : 스웨거에서 구글 로그인 hide
ggamnunq Oct 24, 2025
c91a518
fix : 검색 api 버그 수정
ggamnunq Oct 24, 2025
44eabbc
Merge pull request #38 from SW-DiffLens/feat#35
ggamnunq Oct 24, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,25 +1,151 @@
package DiffLens.back_end.domain.library.controller;

import DiffLens.back_end.domain.library.dto.LibraryRequestDto;
import DiffLens.back_end.domain.library.dto.LibraryResponseDTO;
import DiffLens.back_end.domain.library.service.LibraryService;
import DiffLens.back_end.domain.members.entity.Member;
import DiffLens.back_end.domain.members.service.auth.CurrentUserService;
import DiffLens.back_end.global.responses.exception.ApiResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;

@Tag(name = "라이브러리 API")
@RestController
@RequestMapping("/libraries")
@RequiredArgsConstructor
public class LibraryController {

@GetMapping
@Operation(summary = "라이브러리 목록 조회 ( 미구현 )")
public ApiResponse<LibraryResponseDTO.ListResult> libraryList( /* 파라미터 추가 필요 */ ){
LibraryResponseDTO.ListResult result = new LibraryResponseDTO.ListResult();
return ApiResponse.onSuccess(result);
}
private final LibraryService libraryService;
private final CurrentUserService currentUserService;

@GetMapping
@Operation(summary = "라이브러리 목록 조회", description = """

## 개요
인증된 사용자가 생성한 라이브러리 목록을 조회하는 API입니다.

## 응답
- libraries : 라이브러리 목록 배열
- library_id : 라이브러리 ID
- library_name : 라이브러리 이름
- tags : 라이브러리 분류 태그 리스트
- panel_count : 저장된 패널 개수
- created_at : 생성 시간
- page_info : 페이징 정보 (현재는 null, 추후 구현 예정)

## 권한
본인이 생성한 라이브러리만 조회할 수 있습니다.

## 정렬
최근 생성된 순서로 정렬됩니다.

""")
public ApiResponse<LibraryResponseDTO.ListResult> libraryList() {
Member member = currentUserService.getCurrentUser();
LibraryResponseDTO.ListResult result = libraryService.getLibrariesByMember(member);
return ApiResponse.onSuccess(result);
}

@PostMapping
@Operation(summary = "라이브러리 생성", description = """

## 개요
검색 기록을 기반으로 라이브러리를 생성하는 API입니다.

## Request Body
- search_history_id : 저장할 검색 기록의 ID (필수)
- library_name : 라이브러리 이름 (필수)
- tags : 라이브러리 분류 태그 리스트 (필수)
- panel_ids : 저장할 패널 ID 리스트 (선택, null이면 검색 기록의 모든 패널 저장)

## 응답
- library_id : 생성된 라이브러리 ID
- library_name : 라이브러리 이름
- search_history_id : 연결된 검색 기록 ID
- panel_count : 저장된 패널 개수
- created_at : 생성 시간

## 권한
본인의 검색 기록만 라이브러리로 저장할 수 있습니다.

""")
public ApiResponse<LibraryResponseDTO.CreateResult> createLibrary(
@RequestBody @Valid LibraryRequestDto.Create request) {
Member member = currentUserService.getCurrentUser();
LibraryService.LibraryCreateResult createResult = libraryService.createLibrary(request, member);

LibraryResponseDTO.CreateResult result = LibraryResponseDTO.CreateResult.from(
createResult.getLibrary(),
request.getSearchHistoryId(),
createResult.getPanelCount());
return ApiResponse.onSuccess(result);
}

@GetMapping("/{libraryId}")
@Operation(summary = "특정 라이브러리 상세 조회", description = """
## 개요
특정 라이브러리의 상세 정보를 조회하는 API입니다.

## Path Parameters
- libraryId : 조회할 라이브러리 ID

## 응답 데이터
- 라이브러리 기본 정보 (이름, 태그, 생성일, 수정일)
- 포함된 패널들의 상세 정보
- 연결된 검색기록들 -> 혹시 몰라 추가한 로직으로 필요 없다고 판단될 시 안쓰셔도 됩니다.
- 패널 통계 정보 (성별, 연령대, 거주지 분포) -> 혹시 몰라 추가한 로직으로 필요 없다고 판단될 시 안쓰셔도 됩니다.

## 권한
본인이 생성한 라이브러리만 조회할 수 있습니다.
""")
public ApiResponse<LibraryResponseDTO.LibraryDetail> getLibraryDetail(@PathVariable Long libraryId) {
Member member = currentUserService.getCurrentUser();
LibraryResponseDTO.LibraryDetail result = libraryService.getLibraryDetail(libraryId, member);
return ApiResponse.onSuccess(result);
}

@PutMapping("/{libraryId}/search-histories/{searchHistoryId}")
@Operation(summary = "기존 라이브러리에 새로운 검색기록 추가(병합)", description = """

## 개요
기존 라이브러리에 검색기록을 추가하는 API입니다.
라이브러리의 패널 ID와 검색기록의 패널 ID를 병합하여 중복을 제거합니다.

## Path Parameters
- libraryId : 라이브러리 ID
- searchHistoryId : 추가할 검색기록 ID

## 응답
- library_id : 라이브러리 ID
- library_name : 라이브러리 이름
- search_history_id : 추가된 검색기록 ID
- panel_count : 새로 추가된 패널 개수
- panel_ids : 병합된 전체 패널 ID 리스트
- created_at : 생성 시간

## 권한
본인의 라이브러리와 검색기록만 사용할 수 있습니다.

## 예시
- 라이브러리 1번에 패널 ID [1, 2, 3]이 있음
- 검색기록 2번에 패널 ID [3, 4, 5]가 있음
- 결과: 라이브러리 1번에 패널 ID [1, 2, 3, 4, 5]가 됨

""")
public ApiResponse<LibraryResponseDTO.CreateResult> addSearchHistoryToLibrary(
@PathVariable Long libraryId,
@PathVariable Long searchHistoryId) {
Member member = currentUserService.getCurrentUser();
LibraryService.LibraryCreateResult createResult = libraryService.addSearchHistoryToLibrary(libraryId,
searchHistoryId, member);

LibraryResponseDTO.CreateResult result = LibraryResponseDTO.CreateResult.from(
createResult.getLibrary(),
searchHistoryId,
createResult.getPanelCount());
return ApiResponse.onSuccess(result);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package DiffLens.back_end.domain.library.dto;

import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.util.List;

public class LibraryRequestDto {

@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class Create {

@NotNull(message = "검색 기록 ID는 필수입니다")
@JsonProperty("search_history_id")
private Long searchHistoryId;

@NotBlank(message = "라이브러리 이름은 필수입니다")
@JsonProperty("library_name")
private String libraryName;

@NotNull(message = "태그는 필수입니다")
private List<String> tags;

@JsonProperty("panel_ids")
private List<String> panelIds; // 선택적: null이면 SearchHistory의 panelIds 사용
}

}
Loading
Loading