BookReservationController.java

package org.darkroomlibrary.controller;

import org.darkroomlibrary.aop.NormalizePageQuery;
import org.darkroomlibrary.aop.RequireRole;
import org.darkroomlibrary.domain.type.UserRole;
import org.darkroomlibrary.web.response.ApiResponse;
import org.darkroomlibrary.web.dto.query.BookReservationPageQuery;
import org.darkroomlibrary.web.view.BookReservationView;
import org.darkroomlibrary.service.BookReservationService;
import org.springframework.web.bind.annotation.*;

import jakarta.annotation.Resource;
import java.util.List;

/**
 * 图书预约控制器
 */
@RestController
@RequestMapping("/bookReservation")
public class BookReservationController {

    @Resource
    private BookReservationService bookReservationService;

    /**
     * 预约图书
     */
    @RequireRole(UserRole.READER)
    @PostMapping("/reserve/{bookId}")
    public ApiResponse<Void> reserve(@PathVariable Integer bookId) {
        return bookReservationService.reserve(bookId);
    }

    @RequireRole(UserRole.READER)
    @PostMapping("/cancel/{reservationId}")
    public ApiResponse<Void> cancel(@PathVariable Integer reservationId) {
        return bookReservationService.cancel(reservationId);
    }

    @NormalizePageQuery
    @RequireRole({UserRole.READER, UserRole.ADMIN})
    @PostMapping("/query")
    public ApiResponse<List<BookReservationView>> query(@RequestBody BookReservationPageQuery dto) {
        return bookReservationService.query(dto);
    }
}