반응형
Entity
FolderList
package com.Kkrap.Entity;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Entity
@Getter
@Setter
@Table(name = "folderlist")
public class FolderList {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long folderListId;
@ManyToOne
@JoinColumn(nullable = false, name = "folder_id")
private Folders folder;
@ManyToOne
@JoinColumn(nullable = false, name = "link_id")
private Links link;
}
Folders
package com.Kkrap.Entity;
import jakarta.persistence.*;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.CreationTimestamp;
import java.time.LocalDateTime;
import java.util.List;
@Entity
@Getter
@Setter
@Table(name = "folders")
public class Folders {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long folderId;
@Column(nullable = false)
private Long userId;
@Column(nullable = true)
private String FolderUrl;
@Column(nullable = false)
@CreationTimestamp
private LocalDateTime createTime;
@Column(nullable = false)
private String folderName;
@OneToMany(mappedBy = "folder", cascade = CascadeType.ALL)
private List<FolderList> folderList;
@Builder
public Folders(Long userId){
this.userId = userId;
}
public Folders(Long userId, String folderName){
this.userId = userId;
this.folderName = folderName;
}
public Folders()
{}
}
Controller
FoldersController
package com.Kkrap.Controller;
import com.Kkrap.RequestDTO.FolderDeleteDTO;
import com.Kkrap.RequestDTO.FolderInsertUrlRequestDTO;
import com.Kkrap.RequestDTO.FolderUrlRequestDTO;
import com.Kkrap.RequestDTO.FolderCreateRequestDTO;
import com.Kkrap.ResponseDto.FolderUrlResponseDTO;
import com.Kkrap.ResponseDto.MessageResponseDTO;
import com.Kkrap.Service.FoldersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Controller
@RestController
@RequestMapping("/v1/folders")
public class FoldersController {
@Autowired
private FoldersService foldersService;
//Selected
//folders의 전체 Id 보내주기
@GetMapping("/allid")
public ResponseEntity<List<Long>> SelectedFoldersId(@RequestParam(name = "userId") Long user_id){
// FoldersReponseDTO FoldersId = foldersService.SelectedFoldersId(user_id);
return ResponseEntity.ok(foldersService.SelectedFoldersId(user_id));
}
//folders 안에 있는 url 보내주기
@PostMapping("/folderurl")
public ResponseEntity<List<FolderUrlResponseDTO>> SelectedFolderUrl(@RequestBody FolderUrlRequestDTO folderUrlRequestDTO)
{
List<FolderUrlResponseDTO> responseDto = foldersService.SelectedFolderUrl(folderUrlRequestDTO.getFolderId(), folderUrlRequestDTO.getUserId());
return ResponseEntity.ok(responseDto);
}
//Create
//1. 폴더를 만드는 api
@PostMapping("/create")
public ResponseEntity<MessageResponseDTO> CreateFolder(@RequestBody FolderCreateRequestDTO foldersCreateRequestDTO)
{
return foldersService.CreateFolder(foldersCreateRequestDTO);
}
//Delete
@PostMapping("/delete")
public ResponseEntity<MessageResponseDTO> DeleteFolder(@RequestBody FolderDeleteDTO folderDeleteDTO)
{
return foldersService.DeleteFolder(folderDeleteDTO);
}
//Update
//폴더의 이름을 변경
//폴더 전체 조회 -> 이거는 최악으 상황일 때 사용,,
//요청은 사용자 id
// @GetMapping("/all")
// public List<> SelectedMemberFolders()
// {}
}
Service
FolderListService
package com.Kkrap.Service;
import com.Kkrap.Entity.FolderList;
import com.Kkrap.Entity.Folders;
import com.Kkrap.Entity.Links;
import com.Kkrap.Entity.Users;
import com.Kkrap.Repository.FolderListRepository;
import com.Kkrap.Repository.FoldersRepository;
import com.Kkrap.Repository.LinksRepository;
import com.Kkrap.Repository.UsersRepository;
import com.Kkrap.RequestDTO.FolderInsertUrlRequestDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
@Service
public class FolderListService {
@Autowired
private FolderListRepository folderListRepository;
@Autowired
private UsersRepository usersRepository;
@Autowired
private FoldersRepository foldersRepository;
@Autowired
private LinksRepository linksRepository;
//폴더에 url을 넣는 api
public ResponseEntity<FolderInsertUrlRequestDTO> InsertUrlFolder(FolderInsertUrlRequestDTO folderInsertUrlRequestDTO)
{
System.out.println(folderInsertUrlRequestDTO.getFolderId()+ " " + folderInsertUrlRequestDTO.getUserId());
// //먼저 folderId와 userId를 가진 folder가 있는지 체크
// Optional<Folders> folder = foldersRepository.findById(folderInsertUrlRequestDTO.getFolderId());
// if (folder.isEmpty())
// {
// return new ResponseEntity("Folder does not exist", HttpStatus.NOT_FOUND);
// }
//사용자가 있는지 검사
Optional<Users> user = usersRepository.findById(
folderInsertUrlRequestDTO.getUserId());
if (user.isEmpty())
{
return new ResponseEntity("User does not exist", HttpStatus.NOT_FOUND);
}
//사용자가 폴더를 가지고 있는지 검사
Optional<Folders> folder = foldersRepository.findByFolderIdAndUserId(
folderInsertUrlRequestDTO.getFolderId(),
folderInsertUrlRequestDTO.getUserId());
if (folder.isEmpty())
{
return new ResponseEntity("Folder does not exist", HttpStatus.NOT_FOUND);
}
List<Long> linkIds = folderInsertUrlRequestDTO.getLinkId();
linkIds.stream()
.map(linkId -> {
FolderList folderList = new FolderList();
folderList.setFolder(folder.get());
Optional<Links> links = linksRepository.findById(linkId);
if (links.isPresent()) {
folderList.setLink(links.get());
return folderListRepository.save(folderList);
} else {
return new ResponseEntity<>("Url does not exist", HttpStatus.NOT_FOUND);
}
}).collect(Collectors.toList());
return ResponseEntity.ok(folderInsertUrlRequestDTO);
}
}
FoldersService
package com.Kkrap.Service;
import com.Kkrap.Entity.FolderList;
import com.Kkrap.Entity.Folders;
import com.Kkrap.Entity.Links;
import com.Kkrap.Entity.Users;
import com.Kkrap.Exception.FoldersNotFoundException;
import com.Kkrap.Repository.FolderListRepository;
import com.Kkrap.Repository.FoldersRepository;
import com.Kkrap.Repository.LinksRepository;
import com.Kkrap.Repository.UsersRepository;
import com.Kkrap.RequestDTO.FolderCreateRequestDTO;
import com.Kkrap.RequestDTO.FolderDeleteDTO;
import com.Kkrap.RequestDTO.FolderInsertUrlRequestDTO;
import com.Kkrap.ResponseDto.FolderUrlResponseDTO;
import com.Kkrap.ResponseDto.MessageResponseDTO;
import org.apache.catalina.User;
import org.apache.coyote.Response;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
@Service
public class FoldersService {
@Autowired
private UsersRepository usersRepository;
@Autowired
private FoldersRepository foldersRepository;
@Autowired
private FolderListRepository folderListRepository;
@Autowired
private LinksRepository linksRepository;
public List<Long> SelectedFoldersId(Long id){
List<Folders> foldersList = foldersRepository.findByUserId(id);
if (foldersList.isEmpty())
{
throw new FoldersNotFoundException("해당 사용자 ID로 폴더를 찾을 수 없습니다.");
}
List<Long> folderIds = foldersList.stream()
.map(Folders::getFolderId)
.collect(Collectors.toList());
// // Response DTO 생성 및 설정
// FoldersReponseDTO responseDTO = new FoldersReponseDTO();
// responseDTO.setFoldersId(folderIds);
return folderIds;
}
public List<FolderUrlResponseDTO> SelectedFolderUrl(Long folderId, Long userId){
// folderId로 모든 FolderList 조회
List<FolderList> folderLists = folderListRepository.findByFolderFolderId(folderId);
// folderLists에서 linkId 목록 추출
List<Long> linkIds = folderLists.stream()
.map(folderList -> folderList.getLink().getLinkId())
.collect(Collectors.toList());
// linkId 목록으로 Links 조회
List<Links> links = linksRepository.findByLinkIdIn(linkIds);
List<FolderUrlResponseDTO> responseDTOs = links.stream()
.map(link -> new FolderUrlResponseDTO(link.getLinkId(), link.getLinkUrl(), link.getCreateTime()) )
.collect(Collectors.toList());
return responseDTOs;
}
//Create
//폴더를 만드는 것
public ResponseEntity<MessageResponseDTO> CreateFolder(FolderCreateRequestDTO foldersCreateRequestDTO)
{
String folderName = foldersCreateRequestDTO.getFolderName();
Long userId = foldersCreateRequestDTO.getUserId();
Folders folder = new Folders(userId, folderName);
foldersRepository.save(folder);
MessageResponseDTO responseDTO = new MessageResponseDTO("create Folder Success");
return ResponseEntity.ok(responseDTO);
}
//Delete
//폴더 삭제
public ResponseEntity<MessageResponseDTO> DeleteFolder(FolderDeleteDTO folderDeleteDTO)
{
Long folderId = folderDeleteDTO.getFolderId();
Optional<Folders> folder = foldersRepository.findById(folderId);
if (folder.isPresent())
{
foldersRepository.deleteById(folderId);
MessageResponseDTO message = new MessageResponseDTO("delete Folder Success");
return ResponseEntity.ok(message);
}
else
{
return new ResponseEntity("Folder does not exist", HttpStatus.NOT_FOUND);
}
}
}
DTO
FolderUrlResponseDTO
package com.Kkrap.ResponseDto;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;
@Getter
@Setter
public class FolderUrlResponseDTO {
private Long linkId;
private String linkUrl;
private LocalDateTime createTime;
public FolderUrlResponseDTO(Long linkId, String linkUrl, LocalDateTime createTime){
this.linkId = linkId;
this.linkUrl = linkUrl;
this.createTime = createTime;
}
}
API 설명
/v1/folders/allid?userId=1
요청
- 사용자의 전체 Folder id값
//folders의 전체 Id 보내주기
@GetMapping("/allid")
public ResponseEntity<List<Long>> SelectedFoldersId(@RequestParam(name = "userId") Long user_id){
// FoldersReponseDTO FoldersId = foldersService.SelectedFoldersId(user_id);
return ResponseEntity.ok(foldersService.SelectedFoldersId(user_id));
}
- List<Long> 이 반환됨.
[
1,
3
]
/v1/folders/folderurl
- 요청 DTO
public class FolderUrlRequestDTO {
private Long folderId;
private Long userId;
}
- 폴더 하나에 있는 모든 링크들
@PostMapping("/folderurl")
public ResponseEntity<List<FolderUrlResponseDTO>> SelectedFolderUrl(@RequestBody FolderUrlRequestDTO folderUrlRequestDTO)
{
List<FolderUrlResponseDTO> responseDto = foldersService.SelectedFolderUrl(folderUrlRequestDTO.getFolderId(), folderUrlRequestDTO.getUserId());
return ResponseEntity.ok(responseDto);
}
- 반환값의 타입 혹은 구조 설명
[
{
"linkId": 5,
"linkUrl": "<https://www.youtube.com/watch?v=0-C4wzioBvY>",
"createTime": "2024-08-30T00:31:47.768886"
},
{
"linkId": 7,
"linkUrl": "<https://www.youtube.com/watch?v=cJA1GOZ8S8o>",
"createTime": "2024-09-22T21:33:02.83475"
}
]
반환 DTO
public class FolderUrlResponseDTO {
private Long linkId;
private String linkUrl;
private LocalDateTime createTime;
}
/v1/folders/create
- 요청 DTO
public class FolderCreateRequestDTO {
private Long userId;
private String folderName;
}
- Folder를 만드는 api
//Create
//1. 폴더를 만드는 api
@PostMapping("/create")
public ResponseEntity<MessageResponseDTO> CreateFolder(@RequestBody FolderCreateRequestDTO foldersCreateRequestDTO)
{
return foldersService.CreateFolder(foldersCreateRequestDTO);
}
- 반환값의 타입 혹은 구조 설명
{
"message": "create Folder Success"
}
/v1/folders/delete
- 요청 DTO
public class FolderDeleteDTO {
private Long folderId;
}
- 폴더를 삭제하는 api
@PostMapping("/delete")
public ResponseEntity<MessageResponseDTO> DeleteFolder(@RequestBody FolderDeleteDTO folderDeleteDTO)
{
return foldersService.DeleteFolder(folderDeleteDTO);
}
- 반환값의 타입 혹은 구조 설명
{
"message": "delete Folder Success"
}
/v1/folderlist/insert/url
- 요청
public class FolderInsertUrlRequestDTO {
private Long folderId;
private List<Long> linkId;
private Long userId;
}
- 폴더 안에 Links들을 넣는 api
@PostMapping("/insert/url")
public ResponseEntity<FolderInsertUrlRequestDTO> InsertUrlFolder(@RequestBody FolderInsertUrlRequestDTO folderInsertUrlRequestDTO)
{
return folderListService.InsertUrlFolder(folderInsertUrlRequestDTO);
}
- 반환값은 FolderInsertUrlRequestDTO랑 같다
{
"folderId": 1,
"linkId": [
8,
9
],
"userId": 1
}
반응형
'Spring Boot > [Spring boot] 개발' 카테고리의 다른 글
[Spring boot] @ResponseEntity @ResponseBody 차이 (0) | 2025.01.05 |
---|---|
[Spring boot] Link 데이터베이스 생성, 기능 추가 (0) | 2025.01.05 |
[Spring boot] JPA 쿼리 메서드 네이밍 및 테이블 및 칼럼 이름 매핑 (2) | 2025.01.05 |
[Spring boot] users 데이터베이스 생성과 로그인 (1) | 2025.01.05 |
[Spring boot] java22 → java21 컴파일 변경 (1) | 2025.01.05 |