diff --git a/src/main/java/com/example/pladialmserver/booking/controller/BookingAdminController.java b/src/main/java/com/example/pladialmserver/booking/controller/BookingAdminController.java index 27018595..4c36bccd 100644 --- a/src/main/java/com/example/pladialmserver/booking/controller/BookingAdminController.java +++ b/src/main/java/com/example/pladialmserver/booking/controller/BookingAdminController.java @@ -62,9 +62,7 @@ public ResponseCustom getOfficeBookingDetail(@Parameter( } - /** - * 관리자 자원 예약 목록을 조회 - */ + /** * 관리자 자원 예약 반려 diff --git a/src/main/java/com/example/pladialmserver/booking/repository/resourceBooking/ResourceBookingRepository.java b/src/main/java/com/example/pladialmserver/booking/repository/resourceBooking/ResourceBookingRepository.java index 47e7299f..fc285d24 100644 --- a/src/main/java/com/example/pladialmserver/booking/repository/resourceBooking/ResourceBookingRepository.java +++ b/src/main/java/com/example/pladialmserver/booking/repository/resourceBooking/ResourceBookingRepository.java @@ -1,6 +1,9 @@ package com.example.pladialmserver.booking.repository.resourceBooking; import com.example.pladialmserver.booking.entity.ResourceBooking; +import com.example.pladialmserver.global.entity.BookingStatus; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; @@ -15,4 +18,5 @@ public interface ResourceBookingRepository extends JpaRepository= :startDate) AND rb.resource.name LIKE %:resourceName%") List findBookedResourceIdsByDateAndResourceName(@Param("startDate") LocalDate startDate, @Param("endDate") LocalDate endDate, @Param("resourceName") String resourceName); + Page findByStatusIn(List list, Pageable pageable); } diff --git a/src/main/java/com/example/pladialmserver/resource/controller/ResourceAdminController.java b/src/main/java/com/example/pladialmserver/resource/controller/ResourceAdminController.java new file mode 100644 index 00000000..df82efe0 --- /dev/null +++ b/src/main/java/com/example/pladialmserver/resource/controller/ResourceAdminController.java @@ -0,0 +1,37 @@ +package com.example.pladialmserver.resource.controller; + +import com.example.pladialmserver.global.response.ResponseCustom; +import com.example.pladialmserver.resource.dto.response.AdminResourceRes; +import com.example.pladialmserver.resource.service.ResourceService; +import io.swagger.annotations.Api; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.web.PageableDefault; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "관리자 자원 API") +@RestController +@RequiredArgsConstructor +@RequestMapping("/admin/resources") +public class ResourceAdminController { + private final ResourceService resourceService; + + /** + * 관리자 자원 예약 목록을 조회 + */ + @Operation(summary = "관리자 자원 예약 목록 조회", description = "관리자 페이지에서 자원 예약 내역을 전체 조회한다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "(S0001)요청에 성공했습니다."), + }) + @GetMapping("/resources") + public ResponseCustom> getBookingResources( + @PageableDefault(size = 8) Pageable pageable){ + return ResponseCustom.OK(resourceService.getBookingResources(pageable)); + } +} diff --git a/src/main/java/com/example/pladialmserver/resource/dto/response/AdminResourceRes.java b/src/main/java/com/example/pladialmserver/resource/dto/response/AdminResourceRes.java new file mode 100644 index 00000000..33c5d644 --- /dev/null +++ b/src/main/java/com/example/pladialmserver/resource/dto/response/AdminResourceRes.java @@ -0,0 +1,42 @@ +package com.example.pladialmserver.resource.dto.response; + +import com.example.pladialmserver.booking.entity.ResourceBooking; +import com.example.pladialmserver.global.utils.DateTimeUtil; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class AdminResourceRes { + @Schema(type = "Long", description = "자원 Id", example = "1") + private Long id; + @Schema(type = "String", description = "자원 이름", example = "'벤츠'") + private String name; + @Schema(type = "String", description = "카테고리", example = "'차량'") + private String category; + @Schema(type = "String", description = "예약일자(시작일)", example = "'2023-10-01 12:00' / '2023-10-01'") + private String startDateTime; + @Schema(type = "String", description = "예약일자(종료일)", example = "'2023-10-01 13:00' / '2023-10-03'") + private String endDateTime; + @Schema(type = "String", description = "요청자", example = "이승학(부장)") + private String requester; + @Schema(type = "String", description = "상태", example = "'예약중' / '사용중'") + private String status; + + public static AdminResourceRes toDto(ResourceBooking resourceBooking){ + return AdminResourceRes.builder() + .id(resourceBooking.getResourceBookingId()) + .name(resourceBooking.getResource().getName()) + .category(resourceBooking.getResource().getCategory().getValue()) + .startDateTime(DateTimeUtil.dateToString(resourceBooking.getStartDate())) + .endDateTime(DateTimeUtil.dateToString(resourceBooking.getEndDate())) + .requester(resourceBooking.getUser().getPosition().getName()) + .status(resourceBooking.getStatus().getValue()) + .build(); + + } + + + +} diff --git a/src/main/java/com/example/pladialmserver/resource/service/ResourceService.java b/src/main/java/com/example/pladialmserver/resource/service/ResourceService.java index 906cc7f2..20967389 100644 --- a/src/main/java/com/example/pladialmserver/resource/service/ResourceService.java +++ b/src/main/java/com/example/pladialmserver/resource/service/ResourceService.java @@ -2,10 +2,12 @@ import com.example.pladialmserver.booking.entity.ResourceBooking; +import com.example.pladialmserver.global.entity.BookingStatus; import com.example.pladialmserver.global.exception.BaseException; import com.example.pladialmserver.global.exception.BaseResponseCode; import com.example.pladialmserver.resource.dto.request.ResourceReq; import com.example.pladialmserver.global.utils.DateTimeUtil; +import com.example.pladialmserver.resource.dto.response.AdminResourceRes; import com.example.pladialmserver.resource.dto.response.ResourceDetailRes; import com.example.pladialmserver.resource.dto.response.ResourceRes; import com.example.pladialmserver.resource.entity.Resource; @@ -15,11 +17,14 @@ import com.example.pladialmserver.user.repository.UserRepository; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; +import java.util.Arrays; import java.util.List; @Service @@ -96,4 +101,19 @@ public void bookResource(Long userId, Long resourceId, ResourceReq resourceReq) } + /** + * 관리자 자원 예약 목록을 조회 + */ + public Page getBookingResources(Pageable pageable) { + Pageable sortedByDateAsc = PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), + Sort.by(Sort.Order.asc("startDate"))); + + Page resourceBookings=resourceBookingRepository.findByStatusIn( + Arrays.asList(BookingStatus.BOOKED, BookingStatus.USING,BookingStatus.WAITING), + sortedByDateAsc + ); + + return resourceBookings.map(AdminResourceRes::toDto); + } + }