Skip to content

Commit

Permalink
Merge pull request #98 from Att-ies/feature/84-artwork-more-info
Browse files Browse the repository at this point in the history
Feature/84 artwork more info
  • Loading branch information
JunYoung-C authored Jan 18, 2023
2 parents 2555fd3 + 7916681 commit 5e1b93c
Show file tree
Hide file tree
Showing 14 changed files with 232 additions and 14 deletions.
12 changes: 11 additions & 1 deletion src/main/java/com/sptp/backend/art_work/repository/ArtWork.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public class ArtWork extends BaseEntity {

private String material;

private String size;
private Integer productionYear;

private Integer price;

Expand All @@ -49,5 +49,15 @@ public class ArtWork extends BaseEntity {
private String guaranteeImage;

private String mainImage;

private boolean frame;

private String genre;

private String description;

@Embedded
private ArtWorkSize artWorkSize;

private String sale_status;
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,7 @@
import java.util.List;

public interface ArtWorkRepository extends JpaRepository<ArtWork, Long> {

List<ArtWork> findByMemberId(Long memberId);
List<ArtWork> findArtWorkByMember(Member member);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.sptp.backend.art_work.repository;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.Embeddable;

@Embeddable
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class ArtWorkSize {

private Integer width;

private Integer length;

private Integer height;

private Integer size;
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@

import com.sptp.backend.art_work.repository.ArtWork;
import com.sptp.backend.art_work.repository.ArtWorkRepository;
import com.sptp.backend.art_work.repository.ArtWorkSize;
import com.sptp.backend.art_work.web.dto.request.ArtWorkSaveRequestDto;
import com.sptp.backend.art_work.web.dto.response.ArtWorkInfoResponseDto;
import com.sptp.backend.art_work.web.dto.response.ArtWorkMyListResponseDto;
import com.sptp.backend.art_work_image.repository.ArtWorkImage;
import com.sptp.backend.art_work_image.repository.ArtWorkImageRepository;
import com.sptp.backend.art_work_keyword.repository.ArtWorkKeyword;
Expand All @@ -21,7 +24,10 @@
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import java.util.stream.Collectors;

@Service
@RequiredArgsConstructor
Expand Down Expand Up @@ -52,12 +58,16 @@ public void saveArtWork(Long loginMemberId, ArtWorkSaveRequestDto dto) throws IO
.member(findMember)
.title(dto.getTitle())
.material(dto.getMaterial())
.size(dto.getSize())
.price(dto.getPrice())
.status(dto.getStatus())
.statusDescription(dto.getStatusDescription())
.guaranteeImage(GuaranteeImageUUID + "." + GuaranteeImageEXT)
.mainImage(mainImageUUID + "." + mainImageEXT)
.genre(dto.getGenre())
.artWorkSize(ArtWorkSize.builder().size(dto.getSize()).length(dto.getLength()).width(dto.getWidth()).height(dto.getHeight()).build())
.frame(dto.isFrame())
.description(dto.getDescription())
.productionYear(dto.getProductionYear())
.build();

artWorkRepository.save(artWork);
Expand Down Expand Up @@ -104,4 +114,37 @@ public void checkExistsImage(ArtWorkSaveRequestDto dto) {
throw new CustomException(ErrorCode.SHOULD_EXIST_IMAGE);
}
}

@Transactional(readOnly = true)
public ArtWorkInfoResponseDto getArtWork(Long artWorkId) {

ArtWork findArtWork = artWorkRepository.findById(artWorkId)
.orElseThrow(() -> new CustomException(ErrorCode.NOT_FOUND_ARTWORK));

Member findArtist = memberRepository.findById(findArtWork.getMember().getId())
.orElseThrow(() -> new CustomException(ErrorCode.NOT_FOUND_ARTIST));

List<ArtWorkImage> artWorkImages = artWorkImageRepository.findByArtWorkId(artWorkId);
List<ArtWorkKeyword> artWorkKeywords = artWorkKeywordRepository.findByArtWorkId(artWorkId);

return ArtWorkInfoResponseDto.builder()
.artist(ArtWorkInfoResponseDto.ArtistDto.from(findArtist))
.artWork(ArtWorkInfoResponseDto.ArtWorkDto.from(findArtWork, artWorkImages, artWorkKeywords))
.build();
}

@Transactional(readOnly = true)
public List<ArtWorkMyListResponseDto> getMyArtWorkList(Long loginMemberId) {

Member findMember = memberRepository.findById(loginMemberId)
.orElseThrow(() -> new CustomException(ErrorCode.NOT_FOUND_MEMBER));

List<ArtWork> findArtWorkList = artWorkRepository.findByMemberId(findMember.getId());

List<ArtWorkMyListResponseDto> artWorkMyListResponseDto = findArtWorkList.stream()
.map(m -> new ArtWorkMyListResponseDto(m.getId(), m.getTitle(), findMember.getNickname()))
.collect(Collectors.toList());

return artWorkMyListResponseDto;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,20 @@

import com.sptp.backend.art_work.service.ArtWorkService;
import com.sptp.backend.art_work.web.dto.request.ArtWorkSaveRequestDto;
import com.sptp.backend.art_work.web.dto.response.ArtWorkInfoResponseDto;
import com.sptp.backend.art_work.web.dto.response.ArtWorkMyListResponseDto;
import com.sptp.backend.jwt.service.dto.CustomUserDetails;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;
import java.util.List;

@RestController
@RequiredArgsConstructor
Expand All @@ -19,12 +24,30 @@ public class ArtWorkController {
private final ArtWorkService artWorkService;

// 작품 등록
@PostMapping("/art-work")
@PostMapping("/art-works")
public ResponseEntity<Void> saveArtWork(@AuthenticationPrincipal CustomUserDetails userDetails,
ArtWorkSaveRequestDto artWorkSaveRequestDto) throws IOException {

artWorkService.saveArtWork(userDetails.getMember().getId(), artWorkSaveRequestDto);

return new ResponseEntity(HttpStatus.OK);
}

// 작품 상세 조회
@GetMapping("/art-works/{artWorkId}")
public ResponseEntity<ArtWorkInfoResponseDto> getArtWork(@PathVariable("artWorkId") Long artWorkId) {

ArtWorkInfoResponseDto artWorkInfoResponseDto = artWorkService.getArtWork(artWorkId);

return ResponseEntity.status(HttpStatus.OK).body(artWorkInfoResponseDto);
}

// 내 등록 작품 조회
@GetMapping("/art-works/me")
public ResponseEntity<List<ArtWorkMyListResponseDto>> getMyArtWorkList(@AuthenticationPrincipal CustomUserDetails userDetails) {

List<ArtWorkMyListResponseDto> artWorkMyListResponseDto = artWorkService.getMyArtWorkList(userDetails.getMember().getId());

return ResponseEntity.status(HttpStatus.OK).body(artWorkMyListResponseDto);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.sptp.backend.art_work.web.dto.request;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.*;
import org.springframework.web.multipart.MultipartFile;

Expand All @@ -14,10 +15,17 @@ public class ArtWorkSaveRequestDto {
private MultipartFile guaranteeImage;
private String title;
private String[] keywords;
private String productionYear;
private Integer productionYear;
private String material;
private String size;
private Integer price;
private String status;
private String statusDescription;
private Integer width;
private Integer length;
private Integer height;
private Integer size;
private boolean frame;
private String genre;
private Integer price;
private String description;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package com.sptp.backend.art_work.web.dto.response;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.sptp.backend.art_work.repository.ArtWork;
import com.sptp.backend.art_work.repository.ArtWorkSize;
import com.sptp.backend.art_work_image.repository.ArtWorkImage;
import com.sptp.backend.art_work_keyword.repository.ArtWorkKeyword;
import com.sptp.backend.common.KeywordMap;
import com.sptp.backend.member.repository.Member;
import lombok.*;

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

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ArtWorkInfoResponseDto {

private ArtistDto artist;
private ArtWorkDto artWork;

@Data
@Builder
public static class ArtistDto {
private String artistEducation;
private String artistName;
private String artistImage;

public static ArtistDto from(Member member) {
return ArtistDto.builder()
.artistName(member.getNickname())
.artistEducation(member.getEducation())
.artistImage(member.getImage())
.build();
}

}

@Data
@Builder
public static class ArtWorkDto {

private String title;
private Integer productionYear;
private String material;
private String genre;
private boolean frame;
// private Integer width;
// private Integer length;
// private Integer height;
// private Integer size;
private String description;
private ArtWorkSize artWorkSize;
private String guaranteeImage;
private String mainImage;
private List<String> keywords;
private List<String> images;

public static ArtWorkDto from(ArtWork artWork, List<ArtWorkImage> artWorkImages, List<ArtWorkKeyword> artWorkKeywords) {
return ArtWorkDto.builder()
.title(artWork.getTitle())
.productionYear(artWork.getProductionYear())
.material(artWork.getMaterial())
.genre(artWork.getGenre())
.frame(artWork.isFrame())
.artWorkSize(artWork.getArtWorkSize())
.guaranteeImage(artWork.getGuaranteeImage())
.mainImage(artWork.getMainImage())
.images(artWorkImages.stream().map(m -> m.getImage()).collect(Collectors.toList()))
.keywords(artWorkKeywords.stream().map(m-> KeywordMap.getKeywordName(m.getKeywordId())).collect(Collectors.toList()))
.build();
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.sptp.backend.art_work.web.dto.response;

import lombok.*;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ArtWorkMyListResponseDto {

private Long id;
private String title;
private String artistName;

// 경매 명과 입찰 현황, 등록 현황은 추후 경매 기능 이후에 적용
// private String auctionName;
// private String biddingStatus;
// private String status;
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface ArtWorkImageRepository extends JpaRepository<ArtWorkImage, Long> {

List<ArtWorkImage> findByArtWorkId(Long artWorkId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface ArtWorkKeywordRepository extends JpaRepository<ArtWorkKeyword, Long> {

List<ArtWorkKeyword> findByArtWorkId(Long artWorkId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,5 @@ public interface MemberRepository extends JpaRepository<Member, Long>, MemberCus
boolean existsByUserId(String userId);

boolean existsByNickname(String nickname);

}
Original file line number Diff line number Diff line change
Expand Up @@ -509,7 +509,7 @@ public List<PreferredArtWorkResponse> getPreferredArtWorkList(Long loginMemberId
List<ArtWork> findPreferredArtWorkList = memberPreferredArtWorkRepository.findPreferredArtWork(loginMemberId);

List<PreferredArtWorkResponse> preferredArtWorkResponse = findPreferredArtWorkList.stream()
.map(m -> new PreferredArtWorkResponse(m.getTitle(), m.getPrice(), processImage(m.getMainImage())))
.map(m -> new PreferredArtWorkResponse(m.getId(), m.getTitle(), m.getPrice(), processImage(m.getMainImage())))
.collect(Collectors.toList());

return preferredArtWorkResponse;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
@Builder
public class PreferredArtWorkResponse {

private Long id;

private String title;

private Integer price;
Expand Down
Loading

0 comments on commit 5e1b93c

Please sign in to comment.