Skip to content

Commit

Permalink
Merge pull request #94 from Review-zip/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
yoondaeng authored Jan 28, 2024
2 parents aadd851 + 8823329 commit e195561
Show file tree
Hide file tree
Showing 22 changed files with 288 additions and 105 deletions.
2 changes: 0 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,6 @@ dependencies {
implementation 'javax.xml.bind:jaxb-api:2.3.1' // XML 문서와 Java 객체 간 매핑을 자동화
implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE' // aws s3

implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE'

// Swagger 의존성 추가
implementation group: 'org.springdoc', name: 'springdoc-openapi-starter-webmvc-ui', version: '2.0.3'

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.example.ReviewZIP.domain.image;

import com.example.ReviewZIP.domain.image.dto.response.UploadImageResponseDto;
import org.springframework.stereotype.Component;

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

@Component
public class ImageConverter {
public static UploadImageResponseDto toUploadImageDto(List<Images> imagesList) {
List<Long> imageIds = imagesList.stream().map(Images::getId).collect(Collectors.toList());
return new UploadImageResponseDto(imageIds);
}
}
4 changes: 4 additions & 0 deletions src/main/java/com/example/ReviewZIP/domain/image/Images.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,8 @@ public class Images extends BaseEntity {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "post_id")
private Posts post;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private Users user;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.example.ReviewZIP.domain.image;

import com.example.ReviewZIP.domain.image.dto.response.UploadImageResponseDto;
import com.example.ReviewZIP.global.response.ApiResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

@RestController
@RequiredArgsConstructor
@RequestMapping("/v1/images")
public class ImagesController {
private final ImagesService imageService;

@PostMapping("/users/{userId}")
public ApiResponse<UploadImageResponseDto> uploadImage(@PathVariable(name="userId") Long userId, @RequestParam("fileList") List<MultipartFile> fileList){
List<Images> imageList = imageService.uploadImage(fileList, userId);
UploadImageResponseDto imageResponseDto = ImageConverter.toUploadImageDto(imageList);
return ApiResponse.onSuccess(imageResponseDto);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.example.ReviewZIP.domain.image;

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

@Repository
public interface ImagesRepository extends JpaRepository<Images, Long> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.example.ReviewZIP.domain.image;

import com.example.ReviewZIP.domain.user.Users;
import com.example.ReviewZIP.domain.user.UsersRepository;
import com.example.ReviewZIP.global.response.code.resultCode.ErrorStatus;
import com.example.ReviewZIP.global.response.exception.handler.UsersHandler;
import com.example.ReviewZIP.global.s3.S3Service;
import com.example.ReviewZIP.global.s3.dto.S3Result;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import java.util.ArrayList;
import java.util.List;

@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class ImagesService {
private final ImagesRepository imagesRepository;
private final UsersRepository usersRepository;
private final S3Service s3Service;

@Transactional
public List<Images> uploadImage(List<MultipartFile> fileList, Long userId) {
Users user = usersRepository.findById(userId).orElseThrow(() -> new UsersHandler(ErrorStatus.USER_NOT_FOUND));

List<Images> savedImages = new ArrayList<>();
for(MultipartFile file : fileList) {
S3Result s3Result = s3Service.uploadFile(file);

Images newImage = new Images();
newImage.setName(file.getOriginalFilename());
newImage.setUrl(s3Result.getFileUrl());
newImage.setType(file.getContentType());
newImage.setUser(user);

savedImages.add(imagesRepository.save(newImage));
}

return savedImages;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.example.ReviewZIP.domain.image.dto.request;

import lombok.Getter;

import java.util.List;

@Getter
public class ImageRequestDto {
private Long userId;
private List<String> urlList;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.example.ReviewZIP.domain.image.dto.response;

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

import java.util.List;
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UploadImageResponseDto {
public List<Long> imageIds;
}
3 changes: 2 additions & 1 deletion src/main/java/com/example/ReviewZIP/domain/post/Posts.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public class Posts extends BaseEntity {
@Column(nullable = false)
private Double point;

@Column(nullable = false)
@Column(columnDefinition = "boolean default false")
private Boolean is_read;

@ManyToOne(fetch = FetchType.LAZY)
Expand All @@ -53,4 +53,5 @@ public class Posts extends BaseEntity {

@OneToMany(mappedBy = "post", cascade = CascadeType.ALL)
private List<PostHashtags> postHashtagList = new ArrayList<>();

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.example.ReviewZIP.domain.post;

import com.example.ReviewZIP.domain.post.dto.request.PostRequestDto;
import com.example.ReviewZIP.domain.post.dto.response.PostResponseDto;
import com.example.ReviewZIP.global.response.ApiResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
@RequestMapping("/v1/posts")
public class PostsController {
private final PostsService postsService;
private final PostsConverter postsConverter;

@PostMapping
public ApiResponse<PostResponseDto.CreatedPostResponseDto> createPost(@RequestBody PostRequestDto postRequestDto){
Posts post = postsService.createPost(postRequestDto);
return ApiResponse.onSuccess(PostsConverter.toPostResponseDto(post));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.example.ReviewZIP.domain.post;

import com.example.ReviewZIP.domain.post.dto.response.PostResponseDto;
import com.example.ReviewZIP.domain.image.Images;
import org.springframework.stereotype.Component;

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

@Component
public class PostsConverter {
public static PostResponseDto.CreatedPostResponseDto toPostResponseDto(Posts post) {
List<Long> imageIds = post.getPostImageList().stream()
.map(Images::getId)
.collect(Collectors.toList());

return PostResponseDto.CreatedPostResponseDto.builder()
.postId(post.getId())
.comment(post.getComment())
.point(post.getPoint())
.userId(post.getUser().getId())
.imageIds(imageIds)
.build();
}
}
44 changes: 44 additions & 0 deletions src/main/java/com/example/ReviewZIP/domain/post/PostsService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.example.ReviewZIP.domain.post;

import com.example.ReviewZIP.domain.image.Images;
import com.example.ReviewZIP.domain.image.ImagesRepository;
import com.example.ReviewZIP.domain.post.dto.request.PostRequestDto;
import com.example.ReviewZIP.domain.user.Users;
import com.example.ReviewZIP.domain.user.UsersRepository;
import com.example.ReviewZIP.global.response.code.resultCode.ErrorStatus;
import com.example.ReviewZIP.global.response.exception.handler.ImagesHandler;
import com.example.ReviewZIP.global.response.exception.handler.UsersHandler;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class PostsService {
private final ImagesRepository imagesRepository;
private final UsersRepository usersRepository;
private final PostsRepository postsRepository;

@Transactional
public Posts createPost(PostRequestDto postRequestDto) {
Users user = usersRepository.findById(postRequestDto.getUserId()).orElseThrow(() -> new UsersHandler(ErrorStatus.USER_NOT_FOUND));

Posts newPost = new Posts();
newPost.setUser(user);
newPost.setComment(postRequestDto.getComment());
newPost.setPoint(postRequestDto.getPoint());
newPost.setIs_read(false);

Posts savedPost = postsRepository.save(newPost);

for (Long imageId : postRequestDto.getImageIds()) {
Images image = imagesRepository.findById(imageId).orElseThrow(() -> new ImagesHandler(ErrorStatus.IMAGE_NOT_FOUND));
image.setPost(savedPost);
image.setUser(user);
imagesRepository.save(image);
savedPost.getPostImageList().add(image); // Post 엔티티가 Images 엔티티의 변경 사항을 반영
}
return savedPost;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.example.ReviewZIP.domain.post.dto.request;

import lombok.Getter;
import lombok.Setter;

import java.util.ArrayList;
import java.util.List;

@Getter
public class PostRequestDto {
private Long userId;
private String comment;
private Double point;
private List<Long> imageIds = new ArrayList<>();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.example.ReviewZIP.domain.post.dto.response;

import lombok.*;

import java.util.List;


public class PostResponseDto {
@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
public static class CreatedPostResponseDto {
private Long postId;
private Long userId;
private String comment;
private Double point;
private List<Long> imageIds;
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.example.ReviewZIP.domain.user;

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

@Repository
public interface UsersRepository extends JpaRepository<Users, Long> {
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,13 @@ public enum ErrorStatus implements BaseErrorCode {
// Hashtag
HASHTAG_NOT_FOUND(HttpStatus.NOT_FOUND, "HASHTAG401", "존재하지 않는 해쉬태그입니다."),

//Store
// Store
STORE_NOT_FOUND(HttpStatus.NOT_FOUND, "STORE401", "존재하지 않는 가게입니다."),
LOCATION_NOT_FOUND(HttpStatus.NOT_FOUND, "STORE402", "존재하지 않는 가게 위치입니다.");
LOCATION_NOT_FOUND(HttpStatus.NOT_FOUND, "STORE402", "존재하지 않는 가게 위치입니다."),

// Image
IMAGE_NOT_FOUND(HttpStatus.NOT_FOUND, "IMAGE401", "파일이 존재하지 않습니다.");



private final HttpStatus httpStatus;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.example.ReviewZIP.global.response.exception.handler;

import com.example.ReviewZIP.global.response.code.BaseErrorCode;
import com.example.ReviewZIP.global.response.exception.GeneralException;

public class ImagesHandler extends GeneralException {
public ImagesHandler(BaseErrorCode errorCode) {super(errorCode);};
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class S3Config {
@Value("${cloud.aws.credentials.accessKey}")
Expand Down
30 changes: 0 additions & 30 deletions src/main/java/com/example/ReviewZIP/global/s3/S3Controller.java

This file was deleted.

Loading

0 comments on commit e195561

Please sign in to comment.