Backend
home
🕠

2024. 9. 4 (rest-api)

생성일
2025/01/24 05:52
태그

실습

1.
Favorite 엔티티 생성
a.
번호(id), 제목(title), 주소(url), 이미지번호(image_id)
2.
Repository 생성
3.
Service 생성
a.
FavoriteResponse insertFav(FavoriteRequest fav, MultipartFile file);
b.
List<FavoriteResponse> getAllFav();
c.
FavoriteResponse updateFav(FavoriteRequest fav, MultipartFile file);
d.
FavoriteResponse deleteFav(Long id);
4.
FavoriteController 생성
a.
/api/favorite (getAllFavList)
b.
/api/favorite (addFav)
c.
/api/favorite (modifyFav)
d.
/api/favorite (removeFav)
엔티티 생성
package com.kosta.entity; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; @Entity @Data @Builder @AllArgsConstructor @NoArgsConstructor public class Favorite { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(updatable = false) private Long id; @Column(nullable = false) private String title; @Column(nullable = false, length = 1000) private String url; @JoinColumn(name = "image_id", nullable = true) @ManyToOne private ImageFile image; }
Java
복사
Repository 생성
package com.kosta.repository; import com.kosta.entity.Favorite; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface FavoriteRepository extends JpaRepository<Favorite, Long> { }
Java
복사
FavoriteController
package com.kosta.controller; import com.kosta.domain.FavoriteRequest; import com.kosta.domain.FavoriteResponse; import com.kosta.service.FavoriteService; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.util.ArrayList; import java.util.List; @RestController @RequiredArgsConstructor @RequestMapping("/api/favorite") public class FavoriteController { private final FavoriteService favoriteService; // { "title" : "네이버", "url" : "http://www.naver.com", "image_id" : "450" } @PostMapping("") public ResponseEntity<FavoriteResponse> addFav( FavoriteRequest fav, @RequestParam(name = "image", required = false) MultipartFile file) { FavoriteResponse savedFavorite = favoriteService.insertFav(fav, file); return ResponseEntity.status(HttpStatus.CREATED).body(savedFavorite); } @GetMapping("") public ResponseEntity<List<FavoriteResponse>> getAllFavList(@RequestParam(name = "id", required = false) Long id) { List<FavoriteResponse> result = new ArrayList<>(); if (id == null) { result = favoriteService.getAllFav(); } else { FavoriteResponse favoriteResponse = favoriteService.getFavoriteById(id); result.add(favoriteResponse); } return ResponseEntity.ok(result); } @GetMapping("/{id}") public ResponseEntity<FavoriteResponse> getFav(@PathVariable("id") Long id) { FavoriteResponse favoriteResponse = favoriteService.getFavoriteById(id); return ResponseEntity.ok(favoriteResponse); } @DeleteMapping("/{id}") public ResponseEntity<FavoriteResponse> removeFav(@PathVariable("id") Long id) { FavoriteResponse deletedFav = favoriteService.deleteFav(id); return ResponseEntity.ok(deletedFav); } @PatchMapping("") public ResponseEntity<FavoriteResponse> modifyFav( FavoriteRequest fav, @RequestParam(name = "image", required = false) MultipartFile file) { FavoriteResponse updatedFav = favoriteService.updatedFav(fav, file); return ResponseEntity.ok(updatedFav); } }
Java
복사
FavoriteService
package com.kosta.service; import com.kosta.domain.FavoriteRequest; import com.kosta.domain.FavoriteResponse; import org.springframework.web.multipart.MultipartFile; import java.util.List; public interface FavoriteService { FavoriteResponse insertFav(FavoriteRequest fav, MultipartFile file); List<FavoriteResponse> getAllFav(); FavoriteResponse getFavoriteById(Long id); FavoriteResponse deleteFav(Long id); FavoriteResponse updatedFav(FavoriteRequest fav, MultipartFile file); }
Java
복사
FavoriteServiceImpl
package com.kosta.service; import com.kosta.domain.FavoriteRequest; import com.kosta.domain.FavoriteResponse; import com.kosta.entity.Favorite; import com.kosta.entity.ImageFile; import com.kosta.repository.FavoriteRepository; import com.kosta.repository.ImageFileRepository; import com.kosta.repository.UserRepository; import com.kosta.util.FileUtils; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.util.ArrayList; import java.util.List; @RequiredArgsConstructor @Service public class FavoriteServiceImpl implements FavoriteService { private final FavoriteRepository favoriteRepository; private final ImageFileRepository imageFileRepository; private final FileUtils fileUtils; private final UserRepository userRepository; private ImageFile saveImage(MultipartFile file) { if (file != null) { ImageFile imageFile = fileUtils.fileUpload(file); if (imageFile != null) { return imageFileRepository.save(imageFile); } } return null; } @Override public FavoriteResponse insertFav(FavoriteRequest favDTO, MultipartFile file) { ImageFile savedImage = saveImage(file); if (saveImage(file) != null) { favDTO.setImageFile(savedImage); } Favorite favorite = favDTO.toEntity(); Favorite savedFavorite = favoriteRepository.save(favorite); return FavoriteResponse.toDTO(savedFavorite); } @Override public List<FavoriteResponse> getAllFav() { List<Favorite> favoriteList = favoriteRepository.findAll(); if (!favoriteList.isEmpty()) { List<FavoriteResponse> favoriteResponseList = favoriteList.stream().map(FavoriteResponse::toDTO).toList(); return favoriteResponseList; } else { return new ArrayList<>(); } } @Override public FavoriteResponse getFavoriteById(Long id) { Favorite favorite = favoriteRepository.findById(id) .orElseThrow(() -> new IllegalArgumentException("찾을 수 없음")); return FavoriteResponse.toDTO(favorite); } @Override public FavoriteResponse deleteFav(Long id) { Favorite favorite = favoriteRepository.findById(id) .orElseThrow(() -> new IllegalArgumentException("찾을 수 없음")); favoriteRepository.delete(favorite); return FavoriteResponse.toDTO(favorite); } @Override public FavoriteResponse updatedFav(FavoriteRequest favDTO, MultipartFile file) { Favorite favorite = favoriteRepository.findById(favDTO.getId()) .orElseThrow(() -> new IllegalArgumentException("찾을 수 없음")); ImageFile savedImage = saveImage(file); if (savedImage != null) { favorite.setImage(savedImage); } if (favDTO.getTitle() != null) { favorite.setTitle(favDTO.getTitle()); } if (favDTO.getUrl() != null) { favorite.setUrl(favDTO.getUrl()); } Favorite updatedFavorite = favoriteRepository.save(favorite); return FavoriteResponse.toDTO(updatedFavorite); } }
Java
복사