실습
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
복사