From e8b8af22e8028a8831e0f76c85ce9b3809bd2786 Mon Sep 17 00:00:00 2001 From: hawardShin Date: Thu, 7 Nov 2024 16:34:15 +0900 Subject: [PATCH] Feat : merge code --- .../billage/auth/config/CorsConfig.java | 3 +- .../dto/response/ClassroomDetailResponse.java | 7 ++- .../repository/ClassroomRepository.java | 5 +- .../service/ClassroomImageService.java | 49 ++++++++++--------- .../classroom/service/ClassroomService.java | 13 +++-- .../billage/classroom/service/S3Service.java | 42 ++++++++-------- .../billage/member/service/MemberService.java | 2 +- 7 files changed, 67 insertions(+), 54 deletions(-) diff --git a/src/main/java/com/groomiz/billage/auth/config/CorsConfig.java b/src/main/java/com/groomiz/billage/auth/config/CorsConfig.java index 8a41a758..ee15c095 100644 --- a/src/main/java/com/groomiz/billage/auth/config/CorsConfig.java +++ b/src/main/java/com/groomiz/billage/auth/config/CorsConfig.java @@ -18,7 +18,8 @@ public CorsFilter corsFilter() { config.addAllowedOriginPattern("*"); // 모든 ip에 응답을 허용하겠다. config.addAllowedHeader("*"); // 모든 header에 응답을 허용하겠다. config.addAllowedMethod("*"); // 모든 post, get, put, delete, patch 요청을 허용하겠다. - source.registerCorsConfiguration("*", config); // api로 시작하는 모든 요청에 대해 적용 + source.registerCorsConfiguration("/**", config); // 모든 경로에 대해 적용 + return new CorsFilter(source); } diff --git a/src/main/java/com/groomiz/billage/classroom/dto/response/ClassroomDetailResponse.java b/src/main/java/com/groomiz/billage/classroom/dto/response/ClassroomDetailResponse.java index 68bb03c8..ffc73a21 100644 --- a/src/main/java/com/groomiz/billage/classroom/dto/response/ClassroomDetailResponse.java +++ b/src/main/java/com/groomiz/billage/classroom/dto/response/ClassroomDetailResponse.java @@ -43,10 +43,10 @@ public ClassroomDetailResponse(Long classroomId, String classroomName, String cl this.reservationTimes = reservationTimes; } - public static ClassroomDetailResponse from(Classroom classroom) { - + // 강의실 정보와 예약 정보를 외부에서 주입받아 ClassroomDetailResponse 생성 + public static ClassroomDetailResponse from(Classroom classroom, List reservations) { + List images = classroom.getImages(); - List reservations = classroom.getReservations(); return ClassroomDetailResponse.builder() .classroomId(classroom.getId()) @@ -64,5 +64,4 @@ public static ClassroomDetailResponse from(Classroom classroom) { ) .build(); } - } diff --git a/src/main/java/com/groomiz/billage/classroom/repository/ClassroomRepository.java b/src/main/java/com/groomiz/billage/classroom/repository/ClassroomRepository.java index 95e5bf93..49111034 100644 --- a/src/main/java/com/groomiz/billage/classroom/repository/ClassroomRepository.java +++ b/src/main/java/com/groomiz/billage/classroom/repository/ClassroomRepository.java @@ -21,5 +21,8 @@ public interface ClassroomRepository extends JpaRepository { + "AND rs.status in ('PENDING', 'APPROVED')") Optional findClassroomByIdAndDate(Long classroomId, LocalDate date); - List findByBuildingIdAndFloorAndCapacityGreaterThanEqual(Long buildingId, Long floor, Integer capacity); + Optional findClassroomById(Long classroomId); + + List findClassroomByBuildingIdAndFloorAndCapacityGreaterThanEqual(Long buildingId, Long floor, Integer capacity); + } diff --git a/src/main/java/com/groomiz/billage/classroom/service/ClassroomImageService.java b/src/main/java/com/groomiz/billage/classroom/service/ClassroomImageService.java index b6c46217..90225fae 100644 --- a/src/main/java/com/groomiz/billage/classroom/service/ClassroomImageService.java +++ b/src/main/java/com/groomiz/billage/classroom/service/ClassroomImageService.java @@ -1,11 +1,5 @@ package com.groomiz.billage.classroom.service; -import java.util.UUID; - -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.multipart.MultipartFile; - import com.groomiz.billage.classroom.dto.response.ClassroomImageResponse; import com.groomiz.billage.classroom.entity.Classroom; import com.groomiz.billage.classroom.entity.ClassroomImage; @@ -16,36 +10,43 @@ import com.groomiz.billage.global.config.S3Config; import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import java.util.UUID; @RequiredArgsConstructor @Transactional @Service public class ClassroomImageService { - private final S3Service s3Service; - private final ClassroomRepository classroomRepository; - private final ClassroomImageRepository classroomImageRepository; - private final S3Config s3Config; + private final S3Service s3Service; + private final ClassroomRepository classroomRepository; + private final ClassroomImageRepository classroomImageRepository; + private final S3Config s3Config; + + public ClassroomImageResponse uploadClassroomImage(Long classroomId, MultipartFile imageFile) throws Exception { + //Classroom 엔티티 찾기 + Classroom classroom = classroomRepository.findById(classroomId) + .orElseThrow(() -> new ClassroomException(ClassroomErrorCode.CLASSROOM_NOT_FOUND)); + + String fileName = UUID.randomUUID() + imageFile.getOriginalFilename(); + // 파일데이터와 파일명 넘겨서 S3에 저장 - public ClassroomImageResponse uploadClassroomImage(Long classroomId, MultipartFile imageFile) throws Exception { - //Classroom 엔티티 찾기 - Classroom classroom = classroomRepository.findById(classroomId) - .orElseThrow(() -> new ClassroomException(ClassroomErrorCode.CLASSROOM_NOT_FOUND)); - String fileName = UUID.randomUUID() + imageFile.getOriginalFilename(); - // 파일데이터와 파일명 넘겨서 S3에 저장 - String imageUrl = s3Service.uploadFile(imageFile, fileName); + String imageUrl = s3Service.uploadFile(imageFile, fileName); - ClassroomImage classroomImage = ClassroomImage.builder() - .classroom(classroom) - .imageUrl(imageUrl) - .build(); + ClassroomImage classroomImage = ClassroomImage.builder() + .classroom(classroom) + .imageUrl(imageUrl) + .build(); - classroomImageRepository.save(classroomImage); + classroomImageRepository.save(classroomImage); - return new ClassroomImageResponse(classroomImage.getId(), classroomId, classroomImage.getImageUrl()); + return new ClassroomImageResponse(classroomImage.getId(), classroomId ,classroomImage.getImageUrl()); - } + } } diff --git a/src/main/java/com/groomiz/billage/classroom/service/ClassroomService.java b/src/main/java/com/groomiz/billage/classroom/service/ClassroomService.java index 60063191..291e3e0d 100644 --- a/src/main/java/com/groomiz/billage/classroom/service/ClassroomService.java +++ b/src/main/java/com/groomiz/billage/classroom/service/ClassroomService.java @@ -19,6 +19,8 @@ import com.groomiz.billage.classroom.exception.ClassroomErrorCode; import com.groomiz.billage.classroom.exception.ClassroomException; import com.groomiz.billage.classroom.repository.ClassroomRepository; +import com.groomiz.billage.reservation.entity.Reservation; + import com.groomiz.billage.reservation.repository.ReservationRepository; import lombok.RequiredArgsConstructor; @@ -35,10 +37,14 @@ public class ClassroomService { @Transactional(readOnly = true) public ClassroomDetailResponse findClassroomByIdAndDate(Long classroomId, LocalDate date) { - Classroom classroom = classroomRepository.findClassroomByIdAndDate(classroomId, date) + Classroom classroom = classroomRepository.findClassroomById(classroomId) .orElseThrow(() -> new ClassroomException(ClassroomErrorCode.CLASSROOM_NOT_FOUND)); - return ClassroomDetailResponse.from(classroom); + List reservationsByClassroomIdsAndDate = reservationRepository.findReservationsByClassroomIdsAndDate( + List.of(classroomId), date); + + return ClassroomDetailResponse.from(classroom, reservationsByClassroomIdsAndDate); + } @Transactional(readOnly = true) @@ -53,7 +59,8 @@ public List findAllClassroom(ClassroomListRequest request throw new BuildingException(BuildingErrorCode.FLOOR_NOT_FOUND); } - List classrooms = classroomRepository.findByBuildingIdAndFloorAndCapacityGreaterThanEqual( + List classrooms = classroomRepository.findClassroomByBuildingIdAndFloorAndCapacityGreaterThanEqual( + request.getBuildingId(), request.getFloor(), request.getHeadcount() ); diff --git a/src/main/java/com/groomiz/billage/classroom/service/S3Service.java b/src/main/java/com/groomiz/billage/classroom/service/S3Service.java index ada04c9e..99d1eed4 100644 --- a/src/main/java/com/groomiz/billage/classroom/service/S3Service.java +++ b/src/main/java/com/groomiz/billage/classroom/service/S3Service.java @@ -1,32 +1,34 @@ package com.groomiz.billage.classroom.service; -import java.io.IOException; -import java.net.URLDecoder; +import com.amazonaws.services.s3.AmazonS3; +import com.amazonaws.services.s3.model.ObjectMetadata; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; -import com.amazonaws.services.s3.AmazonS3; -import com.amazonaws.services.s3.model.ObjectMetadata; +import java.io.IOException; + +import java.net.URLDecoder; -import lombok.RequiredArgsConstructor; -@Service @RequiredArgsConstructor + +@Service public class S3Service { - private final AmazonS3 amazonS3; - - @Value("${cloud.aws.s3.bucket-name}") - private String bucketName; - - public String uploadFile(MultipartFile imageFile, String s3FileName) throws IOException { - // 메타데이터 생성 - ObjectMetadata objMeta = new ObjectMetadata(); - objMeta.setContentLength(imageFile.getInputStream().available()); - // S3에 객체 등록 - amazonS3.putObject(bucketName, s3FileName, imageFile.getInputStream(), objMeta); - // 등록된 객체의 url 반환 - return URLDecoder.decode(amazonS3.getUrl(bucketName, s3FileName).toString(), "utf-8"); - } + private final AmazonS3 amazonS3; + + @Value("${cloud.aws.s3.bucket-name}") + private String bucketName; + + public String uploadFile(MultipartFile imageFile, String s3FileName) throws IOException { + // 메타데이터 생성 + ObjectMetadata objMeta = new ObjectMetadata(); + objMeta.setContentLength(imageFile.getInputStream().available()); + // S3에 객체 등록 + amazonS3.putObject(bucketName, s3FileName, imageFile.getInputStream(), objMeta); + // 등록된 객체의 url 반환 + return URLDecoder.decode(amazonS3.getUrl(bucketName, s3FileName).toString(), "utf-8"); + } } diff --git a/src/main/java/com/groomiz/billage/member/service/MemberService.java b/src/main/java/com/groomiz/billage/member/service/MemberService.java index c510ae34..87275c6d 100644 --- a/src/main/java/com/groomiz/billage/member/service/MemberService.java +++ b/src/main/java/com/groomiz/billage/member/service/MemberService.java @@ -43,7 +43,7 @@ public void register(RegisterRequest registerRequest) { .username(registerRequest.getName()) .password("{bcrypt}" + encodedPassword) .phoneNumber(registerRequest.getPhoneNumber()) - .role(Role.ADMIN) + .role(Role.STUDENT) .studentNumber(registerRequest.getStudentNumber()) .isAdmin(true) .agreedToTerms(registerRequest.isAgreedToTerms())