Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: post 수정 #31

Merged
merged 18 commits into from
Feb 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
package com.gongjakso.server.domain.post.controller;

import com.gongjakso.server.domain.member.entity.Member;
import com.gongjakso.server.domain.post.dto.PostDeleteRes;
import com.gongjakso.server.domain.post.dto.PostReq;
import com.gongjakso.server.domain.post.dto.PostRes;
import com.gongjakso.server.domain.post.entity.Post;
import com.gongjakso.server.domain.post.service.PostService;
import com.gongjakso.server.global.common.ApplicationResponse;
import com.gongjakso.server.global.security.PrincipalDetails;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.boot.autoconfigure.pulsar.PulsarProperties.Authentication;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;

Expand All @@ -20,19 +18,17 @@
public class PostController {

private final PostService postService;

// @PostMapping("")
// public ResponseEntity<Post> create(Member member, @RequestBody PostReq req) {
// return ResponseEntity.ok(postService.create(member, req));
// }

@PostMapping("")
public ResponseEntity<PostRes> create(@AuthenticationPrincipal PrincipalDetails principalDetails, @RequestBody PostReq req) {
return ResponseEntity.ok(postService.create(principalDetails.getMember(), req));
public ApplicationResponse<PostRes> create(@AuthenticationPrincipal PrincipalDetails principalDetails, @RequestBody PostReq req) {
return ApplicationResponse.ok(postService.create(principalDetails.getMember(), req));
}
@PutMapping("/{id}")
public ApplicationResponse<PostRes> modify(@AuthenticationPrincipal PrincipalDetails principalDetails, @PathVariable("id") Long id, @RequestBody PostReq req) {
return ApplicationResponse.ok(postService.modify(principalDetails.getMember(), id, req));
}

@PutMapping("/?{id}")
public ResponseEntity<PostRes> modify(@PathVariable("id") Long id, @RequestBody PostReq req) {
return ResponseEntity.ok(postService.modify(id, req));
@PatchMapping("/{id}")
public ApplicationResponse<PostDeleteRes> delete(@AuthenticationPrincipal PrincipalDetails principalDetails, @PathVariable("id") Long id){
return ApplicationResponse.ok(postService.delete(principalDetails.getMember(), id));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
package com.gongjakso.server.domain.post.dto;public class GetProjectRes {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.gongjakso.server.domain.post.dto;

import lombok.Builder;
import lombok.Getter;

@Getter
public class PostDeleteRes {
private Long postId;
private Long memberId;

@Builder
public PostDeleteRes(Long postId, Long memberId){
this.postId = postId;
this.memberId = memberId;
}
}
23 changes: 22 additions & 1 deletion src/main/java/com/gongjakso/server/domain/post/dto/PostReq.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,31 @@ public class PostReq {
private PostStatus status;
private LocalDateTime startDate;
private LocalDateTime endDate;
private LocalDateTime finishDate;
private Long maxPerson;
private MeetingMethod meetingMethod;
private String meetingArea;
private boolean questionMethod;
private String questionLink;
private boolean isProject;
private boolean postType;

/*
* @Builder
* public PostReq(String title, String contents, PostStatus status, LocalDateTime
* startDate, LocalDateTime endDate,
* Long maxPerson, PostType meetingMethod, String meetingArea, boolean
* questionMethod, String questionLink, boolean isProject){
* this.title = title;
* this.contents = contents;
* this.status = status;
* this.startDate = startDate;
* this.endDate = endDate;
* this.maxPerson = maxPerson;
* this.meetingArea = meetingArea;
* this.meetingMethod = meetingMethod;
* this.questionMethod = questionMethod;
* this.questionLink = questionLink;
* this.isProject = isProject;
* }
*/
}
13 changes: 7 additions & 6 deletions src/main/java/com/gongjakso/server/domain/post/dto/PostRes.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.gongjakso.server.domain.post.dto;

import com.gongjakso.server.domain.member.entity.Member;
import com.gongjakso.server.domain.post.enumerate.MeetingMethod;
import com.gongjakso.server.domain.post.enumerate.PostStatus;
import lombok.Builder;
Expand All @@ -17,33 +16,35 @@ public class PostRes {
private PostStatus status;
private LocalDateTime startDate;
private LocalDateTime endDate;
private LocalDateTime finishDate;
private Long maxPerson;
private MeetingMethod meetingMethod;
private String meetingArea;
private boolean questionMethod;
private String questionLink;
private boolean isProject;
private boolean postType;
private LocalDateTime createdAt;
private LocalDateTime modifiedAt;
private LocalDateTime deletedAt;

@Builder
public PostRes(Long postId, Long memberId, String title, String contents, PostStatus status, LocalDateTime startDate, LocalDateTime endDate,
Long maxPerson, MeetingMethod meetingMethod, String meetingArea, boolean questionMethod, String questionLink,
boolean isProject, LocalDateTime createdAt, LocalDateTime modifiedAt, LocalDateTime deletedAt) {
LocalDateTime finishDate, Long maxPerson, MeetingMethod meetingMethod, String meetingArea, boolean questionMethod, String questionLink,
boolean postType, LocalDateTime createdAt, LocalDateTime modifiedAt, LocalDateTime deletedAt) {
this.postId = postId;
// this.memberId = memberId;
this.memberId = memberId;
this.title = title;
this.contents = contents;
this.status = status;
this.startDate = startDate;
this.endDate = endDate;
this.finishDate = finishDate;
this.maxPerson = maxPerson;
this.meetingArea = meetingArea;
this.meetingMethod = meetingMethod;
this.questionMethod = questionMethod;
this.questionLink = questionLink;
this.isProject = isProject;
this.postType = postType;
this.createdAt = createdAt;
this.modifiedAt = modifiedAt;
this.deletedAt = deletedAt;
Expand Down
48 changes: 31 additions & 17 deletions src/main/java/com/gongjakso/server/domain/post/entity/Post.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,18 @@
import com.gongjakso.server.domain.post.enumerate.PostStatus;
import com.gongjakso.server.global.common.BaseTimeEntity;
import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.SQLDelete;

import java.time.LocalDateTime;

import lombok.*;

@Getter
@Entity
@Table(name = "post")
@SQLDelete(sql="UPDATE post SET deleted_at = NOW() where post_id=?")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Post extends BaseTimeEntity {

Expand Down Expand Up @@ -42,6 +46,9 @@ public class Post extends BaseTimeEntity {
@Column(name = "end_date", nullable = false, columnDefinition = "timestamp")
private LocalDateTime endDate;

@Column(name = "finish_date", nullable = false, columnDefinition = "timestamp")
private LocalDateTime finishDate;

@Column(name = "max_person", nullable = false, columnDefinition = "bigint")
private Long maxPerson;

Expand All @@ -58,23 +65,28 @@ public class Post extends BaseTimeEntity {
@Column(name = "question_link", nullable = false, columnDefinition = "text")
private String questionLink;

@Column(name = "is_project", nullable = false, columnDefinition = "tinyint")
private boolean isProject;
@Column(name = "post_type", nullable = false, columnDefinition = "tinyint")
private boolean postType;



@Builder
public Post(Member member, PostReq req) {
this.title = req.getTitle();
public Post(String title, Member member, String contents, PostStatus status, LocalDateTime startDate,
LocalDateTime endDate, LocalDateTime finishDate, Long maxPerson, MeetingMethod meetingMethod,
String meetingArea, boolean questionMethod, String questionLink, boolean postType) {
this.title = title;
this.member = member;
this.contents = req.getContents();
this.status = req.getStatus();
this.startDate = req.getStartDate();
this.endDate = req.getEndDate();
this.maxPerson = req.getMaxPerson();
this.meetingMethod = req.getMeetingMethod();
this.meetingArea = req.getMeetingArea();
this.questionMethod = req.isQuestionMethod();
this.questionLink = req.getQuestionLink();
this.isProject = req.isProject();
this.contents = contents;
this.status = status;
this.startDate = startDate;
this.finishDate = finishDate;
this.endDate = endDate;
this.maxPerson = maxPerson;
this.meetingMethod = meetingMethod;
this.meetingArea = meetingArea;
this.questionMethod = questionMethod;
this.questionLink = questionLink;
this.postType = postType;
}

public void modify(PostReq req) {
Expand All @@ -83,11 +95,13 @@ public void modify(PostReq req) {
this.status = req.getStatus();
this.startDate = req.getStartDate();
this.endDate = req.getEndDate();
this.finishDate = req.getFinishDate();
this.maxPerson = req.getMaxPerson();
this.meetingMethod = req.getMeetingMethod();
this.meetingArea = req.getMeetingArea();
this.questionMethod = req.isQuestionMethod();
this.questionLink = req.getQuestionLink();
this.isProject = req.isProject();
this.postType = req.isPostType();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,12 @@
import com.gongjakso.server.domain.post.entity.Post;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Optional;

public interface PostRepository extends JpaRepository<Post, Long> {
Post findByPostId(Long post_id);
//Page<Post> findAll(Pageable pageable); //전체 조회(페이징)

//Page<Post> findByCategory(StackName stackname, Pageable pageable);

Optional<Post> findByPostIdAndDeletedAtIsNull(Long postId);
}
Original file line number Diff line number Diff line change
@@ -1,52 +1,64 @@
package com.gongjakso.server.domain.post.service;

import com.gongjakso.server.domain.member.entity.Member;
import com.gongjakso.server.domain.member.repository.MemberRepository;
import com.gongjakso.server.domain.post.dto.PostDeleteRes;
import com.gongjakso.server.domain.post.dto.PostReq;
import com.gongjakso.server.domain.post.dto.PostRes;
import com.gongjakso.server.domain.post.entity.Post;
import com.gongjakso.server.domain.post.repository.PostRepository;
import java.util.Optional;
import com.gongjakso.server.global.exception.ApplicationException;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import static com.gongjakso.server.global.exception.ErrorCode.NOT_FOUND_EXCEPTION;
import static com.gongjakso.server.global.exception.ErrorCode.UNAUTHORIZED_EXCEPTION;


@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
public class PostService {
private final PostRepository postRepository;
private final MemberRepository memberRepository;


@Transactional
public PostRes create(Member member, PostReq req) {
// validateMemberId(memberId);
Post post = new Post(member, req);
postRepository.save(post);
Post entity = new Post(req.getTitle(), member, req.getContents(), req.getStatus(), req.getStartDate(), req.getEndDate(),
req.getFinishDate(), req.getMaxPerson(), req.getMeetingMethod(), req.getMeetingArea(), req.isQuestionMethod(),
req.getQuestionLink(), req.isPostType());

postRepository.save(entity);

return PostRes.builder()
.postId(post.getPostId())
.memberId(post.getMember().getMemberId())
.title(post.getTitle())
.contents(post.getContents())
.status(post.getStatus())
.startDate(post.getStartDate())
.endDate(post.getEndDate())
.maxPerson(post.getMaxPerson())
.meetingMethod(post.getMeetingMethod())
.meetingArea(post.getMeetingArea())
.questionMethod(post.isQuestionMethod())
.questionLink(post.getQuestionLink())
.isProject(post.isProject())
.createdAt(post.getCreatedAt())
.modifiedAt(post.getModifiedAt())
.deletedAt(post.getDeletedAt())
.postId(entity.getPostId())
.memberId(entity.getMember().getMemberId())
.title(entity.getTitle())
.contents(entity.getContents())
.status(entity.getStatus())
.startDate(entity.getStartDate())
.endDate(entity.getEndDate())
.finishDate(entity.getFinishDate())
.maxPerson(entity.getMaxPerson())
.meetingMethod(entity.getMeetingMethod())
.meetingArea(entity.getMeetingArea())
.questionMethod(entity.isQuestionMethod())
.questionLink(entity.getQuestionLink())
.postType(entity.isPostType())
.createdAt(entity.getCreatedAt())
.modifiedAt(entity.getModifiedAt())
.deletedAt(entity.getDeletedAt())
.build();
}

}
@Transactional
public PostRes modify(Long id, PostReq req) {
Post entity = postRepository.findById(id)
.orElseThrow(() -> new IllegalArgumentException());
public PostRes modify(Member member, Long id, PostReq req) {
Post entity = postRepository.findByPostIdAndDeletedAtIsNull(id)
.orElseThrow(() -> new ApplicationException(NOT_FOUND_EXCEPTION));
if(!member.getMemberId().equals(entity.getMember().getMemberId())){
throw new ApplicationException(UNAUTHORIZED_EXCEPTION);
}

entity.modify(req);

return PostRes.builder()
Expand All @@ -57,23 +69,44 @@ public PostRes modify(Long id, PostReq req) {
.status(entity.getStatus())
.startDate(entity.getStartDate())
.endDate(entity.getEndDate())
.finishDate(entity.getFinishDate())
.maxPerson(entity.getMaxPerson())
.meetingMethod(entity.getMeetingMethod())
.meetingArea(entity.getMeetingArea())
.questionMethod(entity.isQuestionMethod())
.questionLink(entity.getQuestionLink())
.isProject(entity.isProject())
.postType(entity.isPostType())
.createdAt(entity.getCreatedAt())
.modifiedAt(entity.getModifiedAt())
.deletedAt(entity.getDeletedAt())
.build();

}


@Transactional
public PostDeleteRes delete(Member member, Long id) {
Post entity = postRepository.findByPostIdAndDeletedAtIsNull(id)
.orElseThrow(() -> new ApplicationException(NOT_FOUND_EXCEPTION));

postRepository.delete(entity);
return PostDeleteRes.builder()
.postId(entity.getPostId())
.memberId(entity.getMember().getMemberId())
.build();
}

/*
public Page<GetProjectRes> getProjects(Pageable page) throws ApplicationException {
try {
return postRepository.findAll(page).map(projects -> new GetProjectRes(
projects.getPostId(),
projects.getTitle(),
projects.getMeetingArea());
} catch (Exception e) {
throw new ApplicationException(INVALID_VALUE_EXCEPTION);
}
}

// // 멤버 유효성 판단
// private void validateMemberId(Member member) {
// Optional<Member> optionalMember = memberRepository.findMemberById(member.getMemberId());
// if (optionalMember.isEmpty()) {
// throw new IllegalArgumentException("존재하지 않는 멤버 ID입니다.");
// }
// }
*/
}