Skip to content

Commit

Permalink
Merge pull request #12 from BbeumbungE/feat/BACK-145
Browse files Browse the repository at this point in the history
feat: 게시물 생성 및 삭제, 조회 API [BACK-145]
  • Loading branch information
Fishphobiagg authored Sep 5, 2023
2 parents 3e5995c + 689defe commit 06cef99
Show file tree
Hide file tree
Showing 10 changed files with 123 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@

import com.siliconvalley.domain.canvas.domain.Canvas;
import com.siliconvalley.domain.canvas.exception.CanvasNotFoundException;
import com.siliconvalley.global.common.dto.Response;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

Expand All @@ -21,4 +24,9 @@ public Canvas findById(Long canvasId){
return canvas.get();
}

public Page<Canvas> findByProfileId(Long profileId, Pageable pageable){
Page<Canvas> canvases = canvasRepository.findByProfile_Id(profileId, pageable);
return canvases;
}

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package com.siliconvalley.domain.canvas.dao;

import com.siliconvalley.domain.canvas.domain.Canvas;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;

public interface CanvasRepository extends JpaRepository<Canvas, Long> {
Page<Canvas> findByProfile_Id(Long profileId, Pageable pageable);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.siliconvalley.domain.canvas.dto;

import com.siliconvalley.domain.canvas.domain.Canvas;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class CanvasListResponse {
private Long canvasId;
private String imageUrl;

public CanvasListResponse(Canvas canvas){
this.canvasId = canvas.getId();
this.imageUrl = canvas.getCanvas();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
public enum PostCode implements ResponseCode {

POSTING_SUCCESS(201, "게시물 포스팅에 성공하였습니다.", HttpStatus.CREATED),
DELETE_POST_SUCCESS(204, "게시물 삭제에 성공하였습니다.", HttpStatus.NO_CONTENT)
DELETE_POST_SUCCESS(204, "게시물 삭제에 성공하였습니다.", HttpStatus.NO_CONTENT),
POST_RETRIEVE_SUCCESS(200, "게시글 조회에 성공하였습니다.", HttpStatus.OK)
;

private final int code;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,46 @@
package com.siliconvalley.domain.post.controller;


import com.siliconvalley.domain.post.code.PostCode;
import com.siliconvalley.domain.post.dao.PostFindDao;
import com.siliconvalley.domain.post.domain.Post;
import com.siliconvalley.domain.post.dto.PostResponse;
import com.siliconvalley.global.common.dto.Response;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/posts")
@RequestMapping("/api")
@RequiredArgsConstructor
public class PostController {

private final PostFindDao postFindDao;

@GetMapping("/posts")
public ResponseEntity<Response> getAllPosts(
@RequestParam int page,
@RequestParam int size
){
Response response = postFindDao.findAll(PageRequest.of(page, size));
return ResponseEntity.ok(response);
}

@GetMapping("/subjects/{subjectId}/posts")
public ResponseEntity<Response> getPostsBySubject(
@PathVariable Long subjectId,
@RequestParam int page,
@RequestParam int size){
Response response = postFindDao.getPostsBySubjectName(subjectId, PageRequest.of(page, size));
return ResponseEntity.ok(response);
}

@GetMapping("/posts/{postId}")
public ResponseEntity<Response> getPostDetail(@PathVariable Long postId){
Response response = Response.of(PostCode.POST_RETRIEVE_SUCCESS, new PostResponse(postFindDao.findById(postId)));
return ResponseEntity.ok(response);
}

}
18 changes: 16 additions & 2 deletions src/main/java/com/siliconvalley/domain/post/dao/PostFindDao.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,17 @@
package com.siliconvalley.domain.post.dao;

import com.siliconvalley.domain.item.subject.dao.SubjectFindDao;
import com.siliconvalley.domain.item.subject.domain.Subject;
import com.siliconvalley.domain.post.code.PostCode;
import com.siliconvalley.domain.post.domain.Post;
import com.siliconvalley.domain.post.dto.PostListResponse;
import com.siliconvalley.domain.post.exception.PostNotFoundException;
import com.siliconvalley.global.common.dto.Response;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

Expand All @@ -16,15 +23,22 @@
public class PostFindDao {

private final PostRepository postRepository;
private final SubjectFindDao subjectFindDao;

public Post findById(Long targetId){
final Optional<Post> post = postRepository.findById(targetId);
post.orElseThrow(() -> new PostNotFoundException("해당 게시물을 찾을 수 없습니다."));
return post.get();
}

public Page<Post> findAll(Pageable pageable){
public Response findAll(Pageable pageable){
final Page<Post> posts = postRepository.findAll(pageable);
return posts;
return Response.of(PostCode.POST_RETRIEVE_SUCCESS, posts.map(PostListResponse::new));
}

public Response getPostsBySubjectName(Long subjectId, Pageable pageable) {
Subject subject = subjectFindDao.findById(subjectId);
Page<Post> posts = postRepository.findByCanvas_Subject_SubjectName(subject.getSubjectName(), pageable);
return Response.of(PostCode.POST_RETRIEVE_SUCCESS, posts.map(PostListResponse::new));
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package com.siliconvalley.domain.post.dao;

import com.siliconvalley.domain.post.domain.Post;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;

public interface PostRepository extends JpaRepository<Post,Long> {

}
public interface PostRepository extends JpaRepository<Post, Long> {
Page<Post> findByCanvas_Subject_SubjectName(String subjectName, Pageable pageable);
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,19 @@
package com.siliconvalley.domain.post.dto;

import com.siliconvalley.domain.post.domain.Post;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class PostListResponse {
private Long postId;
private String canvasUrl;

public PostListResponse(Post post){
this.postId = post.getId();
this.canvasUrl = post.getCanvas().getCanvas();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

import com.siliconvalley.domain.canvas.domain.Canvas;
import com.siliconvalley.domain.post.domain.Emotion;
import com.siliconvalley.domain.post.domain.Post;
import com.siliconvalley.domain.profile.domain.Profile;
import com.siliconvalley.domain.profile.dto.ProfileResponse;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
Expand All @@ -13,11 +15,13 @@
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class PostResponse {
private String canvasUrl;
private Profile profile;
private ProfileResponse profile;
private int emotionCount;

public PostResponse(Profile profile, Canvas canvas){

public PostResponse(Post post){
this.canvasUrl = post.getCanvas().getCanvas();
this.profile = new ProfileResponse(post.getProfile());
this.emotionCount = post.getEmotions().size();
}

}
21 changes: 21 additions & 0 deletions src/main/java/com/siliconvalley/domain/profile/api/ProfileApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.siliconvalley.domain.item.myitem.dao.MyItemFindDao;
import com.siliconvalley.domain.point.application.PointManagementService;
import com.siliconvalley.domain.profile.application.ProfileManagementService;
import com.siliconvalley.domain.profile.application.ProfilePostingService;
import com.siliconvalley.domain.profile.dao.ProfileFindDao;
import com.siliconvalley.domain.profile.dto.ProfileCreateOrUpdate;
import com.siliconvalley.domain.profile.dto.ProfileResponse;
Expand All @@ -13,6 +14,7 @@
import javax.validation.Valid;

import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.web.bind.annotation.*;
Expand All @@ -27,6 +29,7 @@ public class ProfileApi {
private final MyItemFindDao myItemFindDao;
private final MyItemCreateService myItemCreateService;
private final PointManagementService pointManagementService;
private final ProfilePostingService profilePostingService;

@PostMapping
public Response createProfile(
Expand Down Expand Up @@ -92,4 +95,22 @@ public Response updatePoint(
pointManagementService.updatePoint(profileId, newPointValue);
return Response.of(CommonCode.SUCCESS_UPDATE);
}
@PostMapping("/{profileId}/canvases/{canvasId}/posts")
public ResponseEntity<Response> postCanvas(
@PathVariable Long profileId,
@PathVariable Long canvasId
){
Response response = profilePostingService.createPostForProfile(profileId, canvasId);
return ResponseEntity.ok(response);
}

@DeleteMapping("/{profileId}/canvases/{canvasId}/posts")
public ResponseEntity<Response> deletePost(
@PathVariable Long profileId,
@PathVariable Long canvasId
){
Response response = profilePostingService.deletePostForProfile(profileId, canvasId);
return ResponseEntity.ok(response);
}

}

0 comments on commit 06cef99

Please sign in to comment.