ReturningRequestController.java

package com.nashtech.rookie.asset_management_0701.controllers;

import org.springframework.http.HttpStatus;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;

import com.nashtech.rookie.asset_management_0701.dtos.filters.ReturningRequestFilter;
import com.nashtech.rookie.asset_management_0701.dtos.responses.APIResponse;
import com.nashtech.rookie.asset_management_0701.dtos.responses.PaginationResponse;
import com.nashtech.rookie.asset_management_0701.dtos.responses.returning_request.ReturningRequestResponseDto;
import com.nashtech.rookie.asset_management_0701.services.returning_request.ReturningRequestService;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;


@RestController
@RequestMapping("/api/v1/returning-requests")
@RequiredArgsConstructor
public class ReturningRequestController {

    private final ReturningRequestService returningRequestService;

    @GetMapping
    @PreAuthorize("hasRole('ADMIN')")
    public APIResponse<PaginationResponse<ReturningRequestResponseDto>> getAllReturningRequests (
            @Valid @ModelAttribute ReturningRequestFilter filter) {
        return APIResponse.<PaginationResponse<ReturningRequestResponseDto>>builder()
                .result(returningRequestService.getAllReturningRequests(filter))
                .build();
    }

    @PatchMapping("/{id}/complete")
    @PreAuthorize("hasRole('ADMIN')")
    public APIResponse<String> completeReturningRequest (@PathVariable Long id) {
        returningRequestService.completeReturningRequest(id);
        return APIResponse.<String>builder()
                .message("Returning request completed successfully")
                .build();
    }

    @PostMapping("/{assignmentId}")
    @ResponseStatus(HttpStatus.CREATED)
    public APIResponse<ReturningRequestResponseDto> createReturningRequestAtHomePage (@PathVariable("assignmentId")
                                                                                          Long assignmentId) {
        return APIResponse.<ReturningRequestResponseDto>builder()
                .result(returningRequestService.createReturningRequest(assignmentId))
                .build();
    }
    @DeleteMapping("/{id}")
    @PreAuthorize("hasRole('ADMIN')")
    public APIResponse<String> cancelReturningRequest (@PathVariable Long id) {
        returningRequestService.cancelReturningRequest(id);
        return APIResponse.<String>builder()
                .message("Returning request canceled successfully")
                .build();
    }
    @PostMapping("/demand/{assignmentId}")
    @PreAuthorize("hasRole('ADMIN')")
    @ResponseStatus(HttpStatus.CREATED)
    public APIResponse<ReturningRequestResponseDto> createReturningRequestAtAdminPage (@PathVariable("assignmentId")
                                                                                      Long assignmentId) {
        return APIResponse.<ReturningRequestResponseDto>builder()
                .result(returningRequestService.adminCreateReturningRequest(assignmentId))
                .build();
    }
}