Skip to content

Commit

Permalink
feat : 자료실 글쓰기, 리스트 출력 api (#24)
Browse files Browse the repository at this point in the history
  • Loading branch information
sebbbin authored Nov 18, 2023
1 parent 2c6bea5 commit 0ae568e
Show file tree
Hide file tree
Showing 13 changed files with 317 additions and 6 deletions.
2 changes: 2 additions & 0 deletions src/main/java/kusitms/gallae/config/SpringSecurityConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ public SecurityFilterChain SecurityFilterChain(HttpSecurity httpSecurity) throws
.cors().configurationSource(corsConfigurationSource()).and()
.authorizeHttpRequests()
.requestMatchers("/manager/**").hasRole(Role.MANAGER.getValue())
.requestMatchers("/reviews/saveReview").hasRole(Role.USER.getValue())
.requestMatchers("/archives/saveArchive").hasRole(Role.USER.getValue())
.anyRequest().permitAll().and()
.exceptionHandling()
.authenticationEntryPoint(this.jwtAuthenticationEntryPoint)
Expand Down
86 changes: 86 additions & 0 deletions src/main/java/kusitms/gallae/controller/ArchiveController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package kusitms.gallae.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.Positive;
import kusitms.gallae.config.BaseResponse;
import kusitms.gallae.config.BaseResponseStatus;
import kusitms.gallae.dto.archive.ArchiveModel;
import kusitms.gallae.dto.archive.ArchivePageRes;
import kusitms.gallae.dto.archive.ArchivePostReq;
import kusitms.gallae.global.S3Service;
import kusitms.gallae.service.archive.ArchiveService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.io.IOException;
import java.security.Principal;

@RestController
@RequiredArgsConstructor
@RequestMapping("/archives")
public class ArchiveController {

@Autowired
private ArchiveService archiveService;

@Autowired
private S3Service s3Service;

@Operation(summary = "자료실 카테고리별 게시판 내용들 가져오기", description = """
전체는 null로 보내주세요
""")
@GetMapping("/category")
public ResponseEntity<BaseResponse<ArchivePageRes>> getArchivesByCategory(
@Parameter(description = "지원서 / 보고서")
@RequestParam(value = "category", required = false)
String category,

@Parameter(description = "페이지 번호")
@Positive(message = "must be greater than 0")
@RequestParam(value = "page", defaultValue = "0")
Integer pageNumber,

@Parameter(description = "페이징 사이즈 (최대 100)")
@Min(value = 1, message = "must be greater than or equal to 1")
@Max(value = 100, message = "must be less than or equal to 100")
@RequestParam(value = "size", defaultValue = "20")
Integer pagingSize){

PageRequest pageRequest = PageRequest.of(pageNumber,pagingSize);
return ResponseEntity.ok(new BaseResponse<>(this.archiveService.getArchivesByCategory(category,pageRequest)));
}

@PostMapping("/saveArchive")
public ResponseEntity<BaseResponse> saveArchive(
Principal principal,
@ModelAttribute
ArchiveModel archiveModel
) throws IOException {
String fileName = null;
String fileUrl = null;
System.out.println(principal.getName());
if(archiveModel.getFile() != null && !archiveModel.getFile().isEmpty()) {
fileName = archiveModel.getFile().getName();
fileUrl = s3Service.upload(archiveModel.getFile());
}
ArchivePostReq archivePostReq = new ArchivePostReq();
archivePostReq.setTitle(archiveModel.getTitle());
archivePostReq.setCategory(archivePostReq.getCategory());
archivePostReq.setFileUrl(fileUrl);
archivePostReq.setFileName(fileName);
archivePostReq.setWriter(archiveModel.getWriter());
archivePostReq.setBody(archiveModel.getBody());
archivePostReq.setHashTags(archiveModel.getHashTags());
archiveService.postArchive(archivePostReq,principal.getName());
return ResponseEntity.ok(new BaseResponse<>(BaseResponseStatus.SUCCESS));

}
}

//writer 왜 Null로 나오지
8 changes: 6 additions & 2 deletions src/main/java/kusitms/gallae/controller/ReviewController.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import org.springframework.web.bind.annotation.*;

import java.io.IOException;
import java.security.Principal;
import java.util.List;

@RestController
Expand Down Expand Up @@ -65,24 +66,27 @@ public ResponseEntity<BaseResponse<ReviewPageRes>> getReviewsByCategory(

@PostMapping("/saveReview")
public ResponseEntity<BaseResponse> saveReview(
Principal principal,

@ModelAttribute
ReviewModel reviewModel
) throws IOException {
String fileName = null;
String fileUrl = null;

System.out.println(principal.getName());
if(reviewModel.getFile() != null && !reviewModel.getFile().isEmpty()) {
fileName = reviewModel.getFile().getName();
fileUrl = s3Service.upload(reviewModel.getFile());
}
ReviewPostReq reviewPostReq = new ReviewPostReq();
reviewPostReq.setTitle(reviewModel.getTitle());
reviewPostReq.setWriter(reviewPostReq.getWriter());
reviewPostReq.setCategory(reviewPostReq.getCategory());
reviewPostReq.setFileUrl(fileUrl);
reviewPostReq.setFileName(fileName);
reviewPostReq.setBody(reviewModel.getBody());
reviewPostReq.setHashTags(reviewModel.getHashTags());
reviewService.postReivew(reviewPostReq);
reviewService.postReivew(reviewPostReq,principal.getName());
return ResponseEntity.ok(new BaseResponse<>(BaseResponseStatus.SUCCESS));

}
Expand Down
19 changes: 19 additions & 0 deletions src/main/java/kusitms/gallae/dto/archive/ArchiveDtoRes.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package kusitms.gallae.dto.archive;


import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.time.LocalDateTime;

@Data
public class ArchiveDtoRes {
private Long id;
private String category; // 게시판 명
private String title; // 제목
private String writer; // 글쓴이

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createdDate; // 등록일

}
20 changes: 20 additions & 0 deletions src/main/java/kusitms/gallae/dto/archive/ArchiveModel.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package kusitms.gallae.dto.archive;


import lombok.Data;
import org.springframework.web.multipart.MultipartFile;

@Data
public class ArchiveModel {
private String title;

private String category;

private String body;

private String hashTags;

private MultipartFile file;
private String writer;

}
13 changes: 13 additions & 0 deletions src/main/java/kusitms/gallae/dto/archive/ArchivePageRes.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package kusitms.gallae.dto.archive;

import lombok.Data;

import java.util.List;

@Data
public class ArchivePageRes {
private Integer totalSize;
private List<ArchiveDtoRes> archives;


}
19 changes: 19 additions & 0 deletions src/main/java/kusitms/gallae/dto/archive/ArchivePostReq.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package kusitms.gallae.dto.archive;

import lombok.Data;

@Data
public class ArchivePostReq {
private String title;

private String category;

private String body;

private String hashTags;

private String fileName;

private String fileUrl;
private String writer;
}
1 change: 1 addition & 0 deletions src/main/java/kusitms/gallae/dto/review/ReviewPostReq.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

@Data
public class ReviewPostReq {
private String writer;

private String title;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package kusitms.gallae.repository.archive;

import kusitms.gallae.domain.Archive;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ArchiveRepository extends JpaRepository<Archive, Long> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package kusitms.gallae.repository.archive;


import com.querydsl.core.BooleanBuilder;
import com.querydsl.core.types.Order;
import com.querydsl.core.types.OrderSpecifier;
import com.querydsl.core.types.dsl.Wildcard;
import com.querydsl.jpa.impl.JPAQueryFactory;
import kusitms.gallae.domain.Archive;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Objects;

import static kusitms.gallae.domain.QArchive.archive;


@RequiredArgsConstructor
@Transactional(readOnly = true)
@Repository
public class ArchiveRepositoryImpl implements ArchiveRespositoryCustom{

private final JPAQueryFactory jpaQueryFactory;

@Override
public Page<Archive> findArchiveDynamicCategory(String category, Pageable pageable) {
List<Archive> archives = this.jpaQueryFactory
.selectFrom(archive)
.where(createArchiveCondition(category))
.orderBy(new OrderSpecifier<>(Order.DESC,archive.createdAt))
.offset(pageable.getOffset())
.limit(pageable.getPageSize())
.fetch();

Long totalSize = this.jpaQueryFactory
.select(Wildcard.count)
.from(archive)
.where(createArchiveCondition(category))
.fetchOne();
return new PageImpl<>(archives, pageable, Objects.requireNonNull(totalSize));
}

private BooleanBuilder createArchiveCondition(String category) {
BooleanBuilder booleanBuilder = new BooleanBuilder();

if(category != null) {
booleanBuilder.and(archive.category.eq(category));
}

return booleanBuilder;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package kusitms.gallae.repository.archive;


import kusitms.gallae.domain.Archive;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

public interface ArchiveRespositoryCustom {

Page<Archive> findArchiveDynamicCategory(String category, Pageable pageable);

}
65 changes: 65 additions & 0 deletions src/main/java/kusitms/gallae/service/archive/ArchiveService.java
Original file line number Diff line number Diff line change
@@ -1,4 +1,69 @@
package kusitms.gallae.service.archive;

import kusitms.gallae.domain.Archive;
import kusitms.gallae.domain.User;
import kusitms.gallae.dto.archive.ArchiveDtoRes;
import kusitms.gallae.dto.archive.ArchivePageRes;
import kusitms.gallae.dto.archive.ArchivePostReq;
import kusitms.gallae.repository.archive.ArchiveRepository;
import kusitms.gallae.repository.archive.ArchiveRespositoryCustom;
import kusitms.gallae.repository.user.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

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

@Service
public class ArchiveService {


@Autowired
private ArchiveRepository archiveRepository;

@Autowired
private ArchiveRespositoryCustom archiveRespositoryCustom;

@Autowired
private UserRepository userRepository;


public ArchivePageRes getArchivesByCategory(String category, Pageable pageable) {
Page<Archive> archives = archiveRespositoryCustom.findArchiveDynamicCategory(category,pageable);
List<ArchiveDtoRes> archiveDtos = archives.getContent().stream()
.map(archive -> {
ArchiveDtoRes archiveDtoRes =new ArchiveDtoRes();
archiveDtoRes.setCategory(archive.getCategory());
archiveDtoRes.setId(archive.getId());
archiveDtoRes.setWriter(archive.getWriter());
archiveDtoRes.setTitle(archive.getTitle());
archiveDtoRes.setCreatedDate(archive.getCreatedAt());
return archiveDtoRes;
}).collect(Collectors.toList());

ArchivePageRes archivePageRes = new ArchivePageRes();
archivePageRes.setArchives(archiveDtos);
archivePageRes.setTotalSize(archives.getTotalPages());

return archivePageRes;
}

public void postArchive(ArchivePostReq archivePostReq, String username) {
Archive archive = new Archive();
User user = userRepository.findByName(username).get();
archive.setTitle(archivePostReq.getTitle());
archive.setUser(user);
archive.setBody(archivePostReq.getBody());
archive.setFileName(archivePostReq.getFileName());
archive.setWriter(archivePostReq.getWriter());
archive.setCategory(archivePostReq.getCategory());
System.out.println(archivePostReq.getCategory());
archive.setFileUrl(archivePostReq.getFileUrl());
archive.setHashtag(archivePostReq.getHashTags());
archiveRepository.save(archive);
}


}
Loading

0 comments on commit 0ae568e

Please sign in to comment.