Skip to content

Commit

Permalink
Merge pull request #25 from Hackathon0704/feat/21
Browse files Browse the repository at this point in the history
[feat/21] 친구 공유글 생성, 조회 API 구현
  • Loading branch information
yslle authored Jul 4, 2024
2 parents adb108c + cf88046 commit 96cb60c
Show file tree
Hide file tree
Showing 5 changed files with 163 additions and 0 deletions.
35 changes: 35 additions & 0 deletions src/main/java/com/umc/dream/controller/FriendPostController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.umc.dream.controller;

import com.umc.dream.apiPayload.ApiResponse;
import com.umc.dream.converter.FriendPostConverter;
import com.umc.dream.domain.Post;
import com.umc.dream.dto.FriendRequestDTO;
import com.umc.dream.dto.FriendResponseDTO;
import com.umc.dream.service.FriendService;
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequiredArgsConstructor
@RequestMapping("/posts/following")
public class FriendPostController {

private final FriendService friendService;

@Operation(summary = "친구 게시물 생성 API")
@PostMapping
public ApiResponse<FriendResponseDTO.CreateResultDTO> createFriendPost(@RequestBody FriendRequestDTO.CreateFriendRequestDTO request){
Post post = friendService.createFriendPost(request);
return ApiResponse.onSuccess(FriendPostConverter.toFriendPostResultDTO(post));
}

@Operation(summary = "친구 전체 게시물 조회 API")
@GetMapping
public ApiResponse<FriendResponseDTO.FriendPostListDTO> getAllFriendPostList(@RequestParam(name = "userId") Long userId) {
List<Post> posts = friendService.getAllFriendPostList(userId);
return ApiResponse.onSuccess(FriendPostConverter.toFriendPostListDTO(posts));
}
}
44 changes: 44 additions & 0 deletions src/main/java/com/umc/dream/converter/FriendPostConverter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.umc.dream.converter;

import com.umc.dream.domain.Post;
import com.umc.dream.domain.User;
import com.umc.dream.domain.enums.Type;
import com.umc.dream.dto.FriendRequestDTO;
import com.umc.dream.dto.FriendResponseDTO;

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

public class FriendPostConverter {
public static Post toFriendPost(FriendRequestDTO.CreateFriendRequestDTO request, User writer) {
return Post.builder()
.title(request.getTitle())
.content(request.getContent())
.type(Type.FRIENDS)
.writer(writer)
.build();
}

public static FriendResponseDTO.CreateResultDTO toFriendPostResultDTO(Post post) {
return FriendResponseDTO.CreateResultDTO.builder()
.name(post.getWriter().getName())
.postId(post.getId())
.title(post.getTitle())
.content(post.getContent())
.createdAt(post.getCreatedDate())
.build();
}

public static FriendResponseDTO.FriendPostListDTO toFriendPostListDTO(List<Post> posts) {
List<FriendResponseDTO.CreateResultDTO> postDTOs = posts.stream()
.map(post -> FriendResponseDTO.CreateResultDTO.builder()
.name(post.getWriter().getName())
.postId(post.getId())
.title(post.getTitle())
.content(post.getContent())
.createdAt(post.getCreatedDate())
.build())
.collect(Collectors.toList());
return new FriendResponseDTO.FriendPostListDTO(postDTOs);
}
}
18 changes: 18 additions & 0 deletions src/main/java/com/umc/dream/dto/FriendRequestDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.umc.dream.dto;

import lombok.Getter;

public class FriendRequestDTO {

@Getter
public static class CreateFriendRequestDTO {
Long userId; // 유저 id
String title;
String content;
}

@Getter
public static class GetAllProPostRequestDTO {
Long userId;
}
}
31 changes: 31 additions & 0 deletions src/main/java/com/umc/dream/dto/FriendResponseDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.umc.dream.dto;

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

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

public class FriendResponseDTO {
@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
public static class CreateResultDTO {
String name; // 유저 이름
Long postId;
String title;
String content;
LocalDateTime createdAt;
}

@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
public static class FriendPostListDTO {
private List<FriendResponseDTO.CreateResultDTO> posts;
}
}
35 changes: 35 additions & 0 deletions src/main/java/com/umc/dream/service/FriendService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.umc.dream.service;

import com.umc.dream.apiPayload.code.status.ErrorStatus;
import com.umc.dream.apiPayload.exception.GeneralException;
import com.umc.dream.converter.FriendPostConverter;
import com.umc.dream.domain.Post;
import com.umc.dream.domain.User;
import com.umc.dream.domain.enums.Type;
import com.umc.dream.dto.FriendRequestDTO;
import com.umc.dream.repository.PostRepository;
import com.umc.dream.repository.UserRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
@RequiredArgsConstructor
public class FriendService {

private final UserRepository userRepository;
private final PostRepository postRepository;

public Post createFriendPost(FriendRequestDTO.CreateFriendRequestDTO request) {
User writer = userRepository.findById(request.getUserId())
.orElseThrow(() -> new GeneralException(ErrorStatus._BAD_REQUEST));
Post post = FriendPostConverter.toFriendPost(request, writer);
return postRepository.save(post);
}

public List<Post> getAllFriendPostList(Long userId) {
return postRepository.findAllByWriterIdAndType(userId, Type.FRIENDS);
}

}

0 comments on commit 96cb60c

Please sign in to comment.