Skip to content

Commit

Permalink
[BE] 아이템 기능 업데이트 (#346)
Browse files Browse the repository at this point in the history
  • Loading branch information
lvalentine6 committed Jul 18, 2023
2 parents acd030f + e081cba commit a45d47c
Show file tree
Hide file tree
Showing 8 changed files with 244 additions and 118 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,6 @@ public ResponseDto<ItemDetailReturnDto> editItem(HttpServletRequest request,
Long memberIdx = (Long)request.getAttribute("memberIdx");
log.info("memberIdx: {}", memberIdx);
itemService.editItem(memberIdx, itemIdx, itemDetailDto);

return ResponseDto.of(RESPONSE_SUCCESS, null);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,15 @@ public class ItemDetailReturnDto {
private final int interest;
private final int view;
private final boolean interestChecked;
private final LocalDateTime postedAt;
private final LocalDateTime lastModifiedAt;
private final List<String> imageUrl;

public static ItemDetailReturnDto of(Item item, SellerDto sellerDto,
CategoryWithoutImageDto categoryWithoutImageDto,
int chat, int interest, boolean interestChecked, List<String> itemImage) {
return new ItemDetailReturnDto(item.getItemIdx(), item.getName(), sellerDto, item.getStatus(),
categoryWithoutImageDto,
item.getDescription(), item.getPrice(), chat, interest, item.getView(), interestChecked, item.getPostedAt(),
item.getDescription(), item.getPrice(), chat, interest, item.getView(), interestChecked, item.getLastModifiedAt(),
itemImage);
}
}
9 changes: 7 additions & 2 deletions be/src/main/java/codesquad/secondhand/entity/Item.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import javax.persistence.OneToOne;
import javax.persistence.Table;

import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

Expand Down Expand Up @@ -57,10 +58,14 @@ public class Item {
@Setter
private ItemImage itemImage;

@LastModifiedDate
@CreatedDate
@Column(name = "posted_at")
private LocalDateTime postedAt;

@LastModifiedDate
@Column(name = "last_modified_at")
private LocalDateTime lastModifiedAt;

@Column(name = "name", nullable = false)
private String name;

Expand Down Expand Up @@ -122,7 +127,6 @@ public void updateItem(Member seller, Category category, Location location, Stri
}
}


@Override
public String toString() {
return "Item{" +
Expand All @@ -132,6 +136,7 @@ public String toString() {
", location=" + location +
", itemImage=" + itemImage +
", postedAt=" + postedAt +
", lastModifiedAt=" + lastModifiedAt +
", name='" + name + '\'' +
", description='" + description + '\'' +
", price=" + price +
Expand Down
6 changes: 5 additions & 1 deletion be/src/main/java/codesquad/secondhand/entity/ItemImage.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,13 @@ public class ItemImage {
@Column(name = "image_url")
private String imageUrl;

public ItemImage(Item item, String imageUrl) {
@Column(name = "image_path")
private String imagePath;

public ItemImage(Item item, String imageUrl, String imagePath) {
this.item = item;
this.imageUrl = imageUrl;
this.imagePath = imagePath;
}

public ItemImage() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ public List<String> upload(Long imageIdx, ItemDetailDto itemDetailDto) {
} catch (IOException e) {
throw new FileUploadFailedException(ImageErrorCode.FileUploadFailedException);
}
itemUrlList.add(amazonS3.getUrl(bucketName, fileName).toString());
itemUrlList.add(fileName + "@" + amazonS3.getUrl(bucketName, fileName).toString());
cnt++;
}
return itemUrlList;
Expand Down
59 changes: 49 additions & 10 deletions be/src/main/java/codesquad/secondhand/service/ItemService.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import static codesquad.secondhand.exception.code.ItemErrorCode.*;
import static codesquad.secondhand.exception.code.MemberErrorCode.*;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

Expand Down Expand Up @@ -91,38 +92,74 @@ public ItemIdxDto creatItem(ItemDetailDto itemDetailDto) {
Item save = itemRepository.save(item);
List<String> itemUrlList = imageService.upload(save.getItemIdx(), itemDetailDto);
for (int i = 0; i < itemUrlList.size(); i++) {
String[] imageSplit = itemUrlList.get(i).split("@");
if (i == 0) {
ItemImage itemImage = itemImageRepository.save(new ItemImage(save, itemUrlList.get(i)));
ItemImage itemImage = itemImageRepository.save(new ItemImage(save, imageSplit[1], imageSplit[0]));
item.setItemImage(itemImage);
continue;
}
itemImageRepository.save(new ItemImage(save, itemUrlList.get(i)));
itemImageRepository.save(new ItemImage(save, imageSplit[1], imageSplit[0]));
}
return new ItemIdxDto(item.getItemIdx());
}

public ItemIdxDto editItem(Long memberIdx, Long itemIdx, ItemDetailDto itemDetailDto) {
public void editItem(Long memberIdx, Long itemIdx, ItemDetailDto itemDetailDto) {
Member member = memberRepository.findById(memberIdx)
.orElseThrow(() -> new RestApiException(NO_EXISTING_MEMBER));

Item itemToEdit = itemRepository.findById(itemIdx).orElseThrow(() -> new RestApiException(NO_EXISTING_ITEM));
if (itemToEdit.getSeller().getMemberIdx() != memberIdx) {

if (!itemToEdit.getSeller().getMemberIdx().equals(memberIdx)) {
log.info("itemDetailDto.getSellerIdx:{}", itemDetailDto.getSellerIdx());
throw new RestApiException(UNAUTHORIZED_EXCEPTION_EDIT);
}

Category category = null;
if (itemDetailDto.getCategoryIdx() != null) {
category = categoryRepository.findById(itemDetailDto.getCategoryIdx()).get();
category = categoryRepository.findById(itemDetailDto.getCategoryIdx())
.orElseThrow();
}

Location location = null;
if (itemDetailDto.getLocationIdx() != null) {
location = locationRepository.findById(itemDetailDto.getLocationIdx()).get();
location = locationRepository.findById(itemDetailDto.getLocationIdx())
.orElseThrow();
}

// 기존 이미지 삭제
List<ItemImage> list = itemToEdit.getItemImages();
List<ItemImage> imagesToDelete = new ArrayList<>();
for (ItemImage itemImage : list) {
imageService.delete(itemImage.getImagePath());

if (memberIdx.equals(itemToEdit.getSeller().getMemberIdx())) {
imagesToDelete.add(itemImage);
} else {
throw new RestApiException(UNAUTHORIZED_EXCEPTION_DELETE);
}
}

imagesToDelete.forEach(itemImage -> {
itemImageRepository.delete(itemImage);
itemToEdit.getItemImages().remove(itemImage);
});

// 수정 이미지 등록
List<String> itemUrlList = imageService.upload(itemIdx, itemDetailDto);
for (int i = 0; i < itemUrlList.size(); i++) {
String[] imageSplit = itemUrlList.get(i).split("@");
if (i == 0) {
ItemImage itemImage = itemImageRepository.save(new ItemImage(itemToEdit, imageSplit[1], imageSplit[0]));
itemToEdit.setItemImage(itemImage);
continue;
}
itemImageRepository.save(new ItemImage(itemToEdit, imageSplit[1], imageSplit[0]));
}
// TODO: 아이템 이미지 수정하기

itemToEdit.updateItem(member, category, location, itemDetailDto.getName(), itemDetailDto.getDescription(),
itemDetailDto.getPrice(),
itemDetailDto.getStatus());
return new ItemIdxDto(itemToEdit.getItemIdx());
// new ItemIdxDto(itemToEdit.getItemIdx());
}

public ItemDetailReturnDto showItemDetail(HttpServletRequest httpServletRequest, Long itemIdx) {
Expand Down Expand Up @@ -169,8 +206,10 @@ public void deleteItem(HttpServletRequest httpServletRequest, ItemIdxDto itemIdx
memberIdx = (Long)httpServletRequest.getAttribute("memberIdx");
}

//TODO: s3 이미지 삭제

List<ItemImage> list = item.getItemImages();
for (ItemImage itemImage : list) {
imageService.delete(itemImage.getImagePath());
}
if (memberIdx.equals(item.getSeller().getMemberIdx())) {
itemRepository.delete(item);
} else {
Expand Down

0 comments on commit a45d47c

Please sign in to comment.