Skip to content

Commit

Permalink
Merge pull request #225 from Review-zip/dev
Browse files Browse the repository at this point in the history
[Dev] main merge
  • Loading branch information
yoondaeng authored Feb 15, 2024
2 parents 7970626 + b4a6ff2 commit c0b3de2
Show file tree
Hide file tree
Showing 14 changed files with 128 additions and 85 deletions.
2 changes: 1 addition & 1 deletion config
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.example.ReviewZIP.domain.image;

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

import java.util.List;
Expand All @@ -9,8 +9,8 @@
@Component
public class ImageConverter {

public static UploadImageResponseDto toUploadImageDto(List<Images> imagesList) {
public static ImageResponseDto toUploadImageDto(List<Images> imagesList) {
List<Long> imageIds = imagesList.stream().map(Images::getId).collect(Collectors.toList());
return new UploadImageResponseDto(imageIds);
return new ImageResponseDto(imageIds);
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
package com.example.ReviewZIP.domain.image;

import com.example.ReviewZIP.domain.image.dto.response.UploadImageResponseDto;
import com.example.ReviewZIP.domain.image.dto.response.ImageResponseDto;
import com.example.ReviewZIP.domain.user.UsersService;
import com.example.ReviewZIP.global.response.ApiResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import lombok.RequiredArgsConstructor;
import org.springframework.http.MediaType;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

Expand All @@ -17,16 +21,18 @@
@RequestMapping("/v1/images")
public class ImagesController {
private final ImagesService imageService;
private final UsersService usersService;

@PostMapping("/users/{userId}")
@Operation(summary = "이미지 업로드 API", description = "UploadImageResponseDto 사용")
@PostMapping(path = "/upload",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@Operation(summary = "파일 업로드 API", description = "UploadImageResponseDto 사용")
@ApiResponses({
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "SEARCH203",description = "OK, 성공"),
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200",description = "OK, 성공"),
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "IMAGE402", description = "이미지 업로드 실패",content = @Content(schema = @Schema(implementation = ApiResponse.class))),
})
public ApiResponse<UploadImageResponseDto> uploadImage(@PathVariable(name="userId") Long userId, @RequestParam("fileList") List<MultipartFile> fileList){
public ApiResponse<ImageResponseDto> uploadImage(@AuthenticationPrincipal UserDetails user, @RequestParam("fileList") List<MultipartFile> fileList){
Long userId = usersService.getUserId(user);
List<Images> imageList = imageService.uploadImage(fileList, userId);
UploadImageResponseDto imageResponseDto = ImageConverter.toUploadImageDto(imageList);
ImageResponseDto imageResponseDto = ImageConverter.toUploadImageDto(imageList);
return ApiResponse.onSuccess(imageResponseDto);
}
}
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,6 @@
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UploadImageResponseDto {
public class ImageResponseDto {
public List<Long> imageIds;
}
6 changes: 3 additions & 3 deletions src/main/java/com/example/ReviewZIP/domain/post/Posts.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,7 @@
import com.example.ReviewZIP.global.entity.BaseEntity;

import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.*;
import org.hibernate.annotations.SQLDelete;
import org.hibernate.annotations.Where;

Expand All @@ -22,7 +20,9 @@
@Entity
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "posts")
public class Posts extends BaseEntity {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,14 +76,14 @@ public ApiResponse<PostResponseDto.PostInfoDto> getPostInfo(@AuthenticationPrinc
}

@PostMapping
@Operation(summary = "게시글 생성 API", description = "PostRequestDto, CreatedPostResponseDto 사용")
@Operation(summary = "게시글 생성 API", description = "지도 위치 정보를 저장하고 게시글을 생성한다. CreatedPostRequestDto, storeInfoDto 사용")
@ApiResponses({
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200",description = "OK, 성공"),
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "POST403", description = "게시글 작성 실패",content = @Content(schema = @Schema(implementation = ApiResponse.class))),
})
public ApiResponse<PostResponseDto.CreatedPostResponseDto> createPost(@RequestBody PostRequestDto postRequestDto){
Posts post = postsService.createPost(postRequestDto);
return ApiResponse.onSuccess(PostsConverter.toPostResponseDto(post));
public ApiResponse<PostResponseDto.PostInfoDto> createPost(@AuthenticationPrincipal UserDetails user, @RequestBody PostRequestDto.CreatedPostRequestDto request){
PostResponseDto.PostInfoDto post = postsService.createPost(usersService.getUserId(user), request);
return ApiResponse.onSuccess(post);
}

@GetMapping("/random-one")
Expand Down
36 changes: 24 additions & 12 deletions src/main/java/com/example/ReviewZIP/domain/post/PostsConverter.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@

import com.example.ReviewZIP.domain.follow.FollowsRepository;
import com.example.ReviewZIP.domain.image.Images;
import com.example.ReviewZIP.domain.post.dto.request.PostRequestDto;
import com.example.ReviewZIP.domain.post.dto.response.PostResponseDto;
import com.example.ReviewZIP.domain.postHashtag.PostHashtags;
import com.example.ReviewZIP.domain.store.Stores;
import com.example.ReviewZIP.domain.store.dto.request.StoreRequestDto;
import com.example.ReviewZIP.domain.user.Users;
import com.example.ReviewZIP.domain.user.UsersRepository;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
Expand All @@ -25,20 +27,30 @@ public PostsConverter(UsersRepository usersRepository, FollowsRepository follows
this.followsRepository = followsRepository;
}

public static Posts toPostDto(PostRequestDto.CreatedPostRequestDto PostDto, Users user) {
return Posts.builder()
.comment(PostDto.getComment())
.point(PostDto.getPoint())
.is_read(false)
.user(user)
.postImageList(new ArrayList<>())
.storeList(new ArrayList<>())
.postHashtagList(new ArrayList<>())
.postLikeList(new ArrayList<>())
.scrabList(new ArrayList<>())
.build();
}

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)
public static Stores toStoreEntity(StoreRequestDto.StoreInfoDto storeInfoDto) {
return Stores.builder()
.name(storeInfoDto.getName())
.address_name(storeInfoDto.getAddressName())
.road_address_name(storeInfoDto.getRoadAddressName())
.longitude(storeInfoDto.getLongitude())
.latitude(storeInfoDto.getLatitude())
.build();
}

public static PostResponseDto.UserInfoDto toUserInfoDto(Users user){
return PostResponseDto.UserInfoDto.builder()
.userId(user.getId())
Expand Down
50 changes: 30 additions & 20 deletions src/main/java/com/example/ReviewZIP/domain/post/PostsService.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@
import com.example.ReviewZIP.domain.postLike.PostLikesRepository;
import com.example.ReviewZIP.domain.scrab.Scrabs;
import com.example.ReviewZIP.domain.scrab.ScrabsRepository;
import com.example.ReviewZIP.domain.store.Stores;
import com.example.ReviewZIP.domain.store.StoresRepository;
import com.example.ReviewZIP.domain.store.dto.request.StoreRequestDto;
import com.example.ReviewZIP.domain.user.Users;
import com.example.ReviewZIP.domain.user.UsersRepository;
import com.example.ReviewZIP.global.redis.RedisService;
Expand Down Expand Up @@ -46,33 +49,40 @@ public class PostsService {
private final ScrabsRepository scrabsRepository;
private final PostHashtagsRepository postHashtagsRepository;
private final RedisService redisService;

public List<PostHashtags> searchPostByHashtag (Long hashtagId){
PostHashtags postHashtags = postHashtagsRepository.findById(hashtagId).orElseThrow(()->new PostHashtagsHandler(ErrorStatus.HASHTAG_NOT_FOUND));
String tagName = postHashtags.getHashtag();
return postHashtagsRepository.findAllByHashtag(tagName);
}
private final StoresRepository storesRepository;

@Transactional
public Posts createPost(PostRequestDto postRequestDto) {
Users user = usersRepository.findById(postRequestDto.getUserId()).orElseThrow(() -> new UsersHandler(ErrorStatus.USER_NOT_FOUND));
public PostResponseDto.PostInfoDto createPost(Long userId, PostRequestDto.CreatedPostRequestDto request) {
Users currentUser = usersRepository.findById(userId)
.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 newPost = PostsConverter.toPostDto(request, currentUser);
postsRepository.save(newPost);

Posts savedPost = postsRepository.save(newPost);
// StoreInfoDto를 Stores 엔티티로 변환하고 저장
StoreRequestDto.StoreInfoDto storeInfoDto = request.getStoreInfo();
Stores newStore = PostsConverter.toStoreEntity(storeInfoDto);
newStore.setPost(newPost); // 연관관계 설정
storesRepository.save(newStore);

for (Long imageId : postRequestDto.getImageIds()) {
Images image = imagesRepository.findById(imageId).orElseThrow(() -> new ImagesHandler(ErrorStatus.IMAGE_NOT_FOUND));
image.setPost(savedPost);
image.setUser(user);
newPost.getStoreList().add(newStore); // 양방향 연관관계 설정

// Image 엔티티의 post 필드 설정
List<Images> images = imagesRepository.findAllById(request.getImageIds());
for (Images image : images) {
image.setPost(newPost);
imagesRepository.save(image);
savedPost.getPostImageList().add(image);
}
return savedPost;

newPost.getPostImageList().addAll(images); // 양방향 연관관계 설정

return PostsConverter.toPostInfoResultDto(newPost, currentUser, false, false, newPost.getCreatedAt().toString());
}

public List<PostHashtags> searchPostByHashtag (Long hashtagId){
PostHashtags postHashtags = postHashtagsRepository.findById(hashtagId).orElseThrow(()->new PostHashtagsHandler(ErrorStatus.HASHTAG_NOT_FOUND));
String tagName = postHashtags.getHashtag();
return postHashtagsRepository.findAllByHashtag(tagName);
}

public static final int NUM_OF_RANDOM_POST = 1;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,23 @@
package com.example.ReviewZIP.domain.post.dto.request;

import com.example.ReviewZIP.domain.store.dto.request.StoreRequestDto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

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<>();
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class CreatedPostRequestDto {
private String comment;
private Double point;
private List<Long> imageIds = new ArrayList<>();
private StoreRequestDto.StoreInfoDto storeInfo;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
import java.util.List;

public class PostResponseDto {
Expand Down Expand Up @@ -58,18 +57,6 @@ public static class PostInfoDto{
private List<ImageDto> postImages;
}

@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
public static class CreatedPostResponseDto {
private Long postId;
private Long userId;
private String comment;
private Double point;
private List<Long> imageIds;
}

@Getter
@Builder
@NoArgsConstructor
Expand Down
15 changes: 9 additions & 6 deletions src/main/java/com/example/ReviewZIP/domain/store/Stores.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@
import com.example.ReviewZIP.global.entity.BaseEntity;
import com.example.ReviewZIP.domain.post.Posts;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.*;

import java.math.BigDecimal;

@Entity
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "stores")
public class Stores extends BaseEntity {
Expand All @@ -24,13 +24,16 @@ public class Stores extends BaseEntity {
private String name;

@Column(nullable = false)
private String address;
private String address_name;

@Column(nullable = false)
private BigDecimal longitude;
private String road_address_name;

@Column(nullable = false)
private BigDecimal latitude;
private String longitude;

@Column(nullable = false)
private String latitude;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "post_id")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.example.ReviewZIP.domain.store;

import com.example.ReviewZIP.domain.user.Users;
import org.springframework.data.jpa.repository.JpaRepository;

public interface StoresRepository extends JpaRepository<Stores, Long> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.example.ReviewZIP.domain.store.dto.request;

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

public class StoreRequestDto {
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class StoreInfoDto {
private String name;
private String addressName;
private String roadAddressName;
private String longitude;
private String latitude;
}
}

0 comments on commit c0b3de2

Please sign in to comment.