ApprovalRecordController.java

package io.featureprobe.api.controller;

import io.featureprobe.api.base.doc.DefaultApiResponses;
import io.featureprobe.api.base.doc.GetApiResponse;
import io.featureprobe.api.dto.ApprovalRecordQueryRequest;
import io.featureprobe.api.dto.ApprovalRecordResponse;
import io.featureprobe.api.dto.ApprovalTotalResponse;
import io.featureprobe.api.base.enums.ApprovalStatusEnum;
import io.featureprobe.api.service.ApprovalRecordService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@Slf4j
@DefaultApiResponses
@Tag(name = "Approval records", description = "The approval records API allows you to list and " +
        "total approval records programmatically.")
@RequestMapping("/api/approvalRecords")
@AllArgsConstructor
@RestController
public class ApprovalRecordController {

    private ApprovalRecordService approvalRecordService;

    @GetMapping
    @GetApiResponse
    @Operation(summary = "List approval records", description = "Use filter to fetch approval records list.")
    public Page<ApprovalRecordResponse> list(@Validated ApprovalRecordQueryRequest queryRequest) {
        return approvalRecordService.list(queryRequest);
    }

    @GetMapping("/total")
    @GetApiResponse
    @Operation(summary = "Total approval records", description = "Total approval records by status.")
    public ApprovalTotalResponse total(@Schema(description = "Built-in status for the approval record.")
                                       ApprovalStatusEnum status) {
        return new ApprovalTotalResponse(approvalRecordService.total(status));
    }

}