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 #8

Closed
wants to merge 2 commits into from
Closed
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
@@ -0,0 +1,43 @@
package com.TwinStar.TwinStar.post.controller;

import org.springframework.web.bind.annotation.*;

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

// 게시글 목록 조회
@GetMapping
public ResponseEntity<List<PostListRes>> getAllPosts() {
List<PostListRes> posts = postService.getAllPosts();
return ResponseEntity.ok(posts);
}

// 게시글 상세 조회
@GetMapping("/{id}")
public ResponseEntity<PostDetailRes> getPost(@PathVariable Long id) {
PostDetailRes post = postService.getPost(id);
return ResponseEntity.ok(post);
}

// 게시글 작성
@PostMapping
public ResponseEntity<PostDetailRes> createPost(@RequestBody PostCreateReq request) {
PostDetailRes createdPost = postService.createPost(request);
return ResponseEntity.status(HttpStatus.CREATED).body(createdPost);
}

// 게시글 수정
@PutMapping("/{id}")
public ResponseEntity<PostDetailRes> updatePost(@PathVariable Long id, @RequestBody PostUpdateReq request) {
PostDetailRes updatedPost = postService.updatePost(id, request);
return ResponseEntity.ok(updatedPost);
}

// 게시글 삭제
@DeleteMapping("/{id}")
public ResponseEntity<Void> deletePost(@PathVariable Long id) {
postService.deletePost(id);
return ResponseEntity.noContent().build();
}
}
62 changes: 62 additions & 0 deletions src/main/java/com/TwinStar/TwinStar/post/domain/Post.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package com.TwinStar.TwinStar.post.domain;

import jakarta.persistence.*;
import jakarta.transaction.Transactional;
import lombok.*;

@AllArgsConstructor
@NoArgsConstructor
@Getter
@Builder
@ToString
@Entity
@Transactional
public class Post extends BaseTimeEntity{

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(length = 3000)
private String contents;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private User user;

@Column(name = "group_id")
private Long groupId;

@Column(name = "share_post_id")
private Long sharePostId;

@Column(name = "post_visibility")
@Enumerated(EnumType.STRING)
private Enum postVisibility;

@Column(name = "post_del")
private int postDel;

@Column(name = "score")
private Long score;

@Column(name = "hot_issue_yn")
private int hotIssueYn;

public PostListRes postListFromEntity(){
return PostListRes.builder()
.id(this.id)
.userNickname(this.user.getNickname())
.build();
}

public PostDetailRes detailFromEntity(){
return PostDetailRes.builder()
.id(this.id)
.contents(this.contents)
.userNickname(this.user.getNickname())
.createdTime(this.getCreatedTime())
.updatedTime(this.getUpdatedTime())
.build();
}
}
24 changes: 24 additions & 0 deletions src/main/java/com/TwinStar/TwinStar/post/dtos/PostCreateReq.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.TwinStar.TwinStar.post.dtos;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@AllArgsConstructor
@NoArgsConstructor
@Data
public class PostCreateReq {
private String content;
private String file;
private


public Post toEntity(User user) {
return Post.builder()
.content(content)
.file(file)
.user(user.getNickname())
.build();
}

}
23 changes: 23 additions & 0 deletions src/main/java/com/TwinStar/TwinStar/post/dtos/PostDetailRes.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.TwinStar.TwinStar.post.dtos;


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

@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
public class PostDetailRes {
private Long id;
private String contents;
private String user;
private Long groupId;
private Long sharePostId;
private Enum postVisibility;
private int postDel;
private Long score;
private int hotIssueYn;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.TwinStar.TwinStar.post.repository;


import com.TwinStar.TwinStar.post.domain.Post;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;

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

public interface PostRepository {

// 제목으로 게시글 검색
List<Post> findByTitleContaining(String title);

// 작성자로 게시글 검색
List<Post> findByAuthor(String author);

// 카테고리별 게시글 검색
List<Post> findByCategory(String category);

// 최신 게시글 n개 조회
@Query("SELECT p FROM Post p ORDER BY p.createdAt DESC")
List<Post> findLatestPosts(Pageable pageable);

// 조회수 기준 인기 게시글
@Query("SELECT p FROM Post p ORDER BY p.viewCount DESC")
List<Post> findPopularPosts(Pageable pageable);

// 특정 기간 내의 게시글 검색
List<Post> findByCreatedAtBetween(LocalDateTime start, LocalDateTime end);
}

27 changes: 27 additions & 0 deletions src/main/java/com/TwinStar/TwinStar/post/service/PostService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.TwinStar.TwinStar.post.service;

import com.TwinStar.TwinStar.post.dtos.PostCreateReq;
import com.TwinStar.TwinStar.post.repository.PostRepository;
import jakarta.persistence.EntityNotFoundException;
import jakarta.transaction.Transactional;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;

@Service
@Transactional
public class PostService {
private final PostRepository postRepository;
private final userRepository userRepository;

public PostService(PostRepository postRepository, userRepository userRepository) {
this.postRepository = postRepository;
this.userRepository = userRepository;
}

public void save(PostCreateReq postCreateReq, UserRepository userRepository){
String Nickname = SecurityContextHolder.getContext().getAuthentication().getName();
User user = userRepository.findByNickname(nickname).orElseThrow(()->new EntityNotFoundException("존재하지 않는 유저 입니다."));
LocalDateTime appointmentTime = null;
}
}