diff --git a/src/main/java/peer/backend/config/SecurityConfig.java b/src/main/java/peer/backend/config/SecurityConfig.java index 4a0d9f30..b1da7be2 100644 --- a/src/main/java/peer/backend/config/SecurityConfig.java +++ b/src/main/java/peer/backend/config/SecurityConfig.java @@ -91,6 +91,8 @@ public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Excepti .antMatchers(HttpMethod.GET, "/api/v1/showcase/*", "/api/v1/showcase", "/api/v1/showcase/comment/*") .permitAll() + .antMatchers(HttpMethod.GET, "/api/v1/job/*", "/api/v1/job") + .permitAll() .antMatchers(HttpMethod.GET, "/api/v1/profile/other") .permitAll() .antMatchers(HttpMethod.GET, "/socket.io/**") diff --git a/src/main/java/peer/backend/controller/board/JobController.java b/src/main/java/peer/backend/controller/board/JobController.java new file mode 100644 index 00000000..651cb768 --- /dev/null +++ b/src/main/java/peer/backend/controller/board/JobController.java @@ -0,0 +1,27 @@ +package peer.backend.controller.board; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Page; +import org.springframework.web.bind.annotation.*; +import peer.backend.dto.board.Job.JobListResponse; +import peer.backend.dto.board.Job.JobResponse; +import peer.backend.service.board.Job.JobService; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/v1/job") +@Slf4j +public class JobController { + + private final JobService jobService; + @GetMapping("") + public Page getJobList(@RequestParam int page, @RequestParam int pageSize){ + return jobService.getJobList(page, pageSize); + } + + @GetMapping("/{jobId}") + public JobResponse getJob(@PathVariable Long jobId){ + return jobService.getJob(jobId); + } +} diff --git a/src/main/java/peer/backend/dto/board/Job/JobListResponse.java b/src/main/java/peer/backend/dto/board/Job/JobListResponse.java new file mode 100644 index 00000000..d2c1156e --- /dev/null +++ b/src/main/java/peer/backend/dto/board/Job/JobListResponse.java @@ -0,0 +1,17 @@ +package peer.backend.dto.board.Job; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +@AllArgsConstructor +@Builder +public class JobListResponse { + String title; + String createdAt; + String writerName; + Long id; +} diff --git a/src/main/java/peer/backend/dto/board/Job/JobResponse.java b/src/main/java/peer/backend/dto/board/Job/JobResponse.java new file mode 100644 index 00000000..4f05fb60 --- /dev/null +++ b/src/main/java/peer/backend/dto/board/Job/JobResponse.java @@ -0,0 +1,19 @@ +package peer.backend.dto.board.Job; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.RequiredArgsConstructor; + +import javax.swing.border.TitledBorder; + +@Getter +@RequiredArgsConstructor +@AllArgsConstructor +public class JobResponse { + String title; + String writerName; + String createdAt; + String content; + Long id; +} diff --git a/src/main/java/peer/backend/entity/board/team/enums/BoardType.java b/src/main/java/peer/backend/entity/board/team/enums/BoardType.java index 93732f8a..47bc83df 100644 --- a/src/main/java/peer/backend/entity/board/team/enums/BoardType.java +++ b/src/main/java/peer/backend/entity/board/team/enums/BoardType.java @@ -11,7 +11,8 @@ public enum BoardType { NORMAL("NORMAL"), ADMIN("ADMIN"), SHOWCASE("SHOWCASE"), - NOTICE("NOTICE") + NOTICE("NOTICE"), + JOB("JOB") ; private final String type; diff --git a/src/main/java/peer/backend/repository/board/team/PostRepository.java b/src/main/java/peer/backend/repository/board/team/PostRepository.java index bd1389a9..36dc7de6 100644 --- a/src/main/java/peer/backend/repository/board/team/PostRepository.java +++ b/src/main/java/peer/backend/repository/board/team/PostRepository.java @@ -23,4 +23,6 @@ public interface PostRepository extends JpaRepository { @Query("SELECT p FROM Post p JOIN p.postLike pl JOIN p.board b WHERE pl.userId = :userId AND pl.type = :type AND p.isPublic = :isPublic AND b.type = :boardType") Page findShowcaseFavoriteList(boolean isPublic, BoardType boardType, Long userId, PostLikeType type, Pageable pageable); + + Page findAllByBoardType(BoardType type, Pageable pageable); } \ No newline at end of file diff --git a/src/main/java/peer/backend/service/board/Job/JobService.java b/src/main/java/peer/backend/service/board/Job/JobService.java new file mode 100644 index 00000000..7109142e --- /dev/null +++ b/src/main/java/peer/backend/service/board/Job/JobService.java @@ -0,0 +1,42 @@ +package peer.backend.service.board.Job; + +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import peer.backend.dto.board.Job.JobListResponse; +import peer.backend.dto.board.Job.JobResponse; +import peer.backend.entity.board.team.Post; +import peer.backend.entity.board.team.enums.BoardType; +import peer.backend.exception.NotFoundException; +import peer.backend.repository.board.team.PostRepository; + +import java.util.Optional; + +@Service +@RequiredArgsConstructor +public class JobService { + + private final PostRepository postRepository; + public Page getJobList(int page, int pageSize){ + Pageable pageable = PageRequest.of(page - 1, pageSize); + Page result = postRepository.findAllByBoardType(BoardType.JOB, pageable); + + return result.map(post -> + new JobListResponse(post.getTitle(), + post.getCreatedAt().toString(), + post.getUser().getNickname(), + post.getId())); + } + + public JobResponse getJob(Long jobId){ + Post job = postRepository.findById(jobId) + .orElseThrow(() -> new NotFoundException("Not Found")); + return new JobResponse(job.getTitle(), + job.getUser().getNickname(), + job.getContent(), + job.getCreatedAt().toString(), + job.getId()); + } +}