PositionController.java

package com.tdmconsult.ete.api;

import com.tdmconsult.ete.evaluation.EvaluationStateDto;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import java.io.IOException;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Tag(name = "NAme", description = "Description")
@RestController
@RequestMapping(value = "/api/positions", produces = MediaType.APPLICATION_JSON_VALUE)
@RequiredArgsConstructor
@PreAuthorize("hasRole('ete_admin')")
public class PositionController {

    private final PositionUiService positionUiService;

    @GetMapping("{isin}/{fiscalYear}")
    @Operation(summary = "query account")
    public ResponseEntity<EvaluationStateDto> getPosition(
            final @PathVariable String isin,
            final @PathVariable int fiscalYear) {

        final var answer = positionUiService.get(isin, fiscalYear);
        return ResponseEntity.ok(answer);
    }

    @GetMapping(value = "{isin}/{fiscalYear}/pdf", produces = "application/pdf")
    @Operation(summary = "export the given version of a branch as PDF")
    public ResponseEntity<InputStreamResource> getPositionAsPdf(
            final @PathVariable String isin,
            final @PathVariable int fiscalYear) throws IOException {

        final var stream = positionUiService.getAsPdfStream(isin, fiscalYear);
        final var body = new InputStreamResource(stream);

        return ResponseEntity.ok()
                .contentType(MediaType.APPLICATION_PDF)
                .header("Content-disposition", "attachment;filename=export.pdf")
                .body(body);
    }

    @GetMapping(value = "overview/{fiscalYear}/pdf", produces = "application/pdf")
    @Operation(summary = "export the given version of a branch as PDF")
    public ResponseEntity<InputStreamResource> getPositionsAsPdf(
            final @PathVariable int fiscalYear) throws IOException {

        final var stream = positionUiService.getAsPdfStream(fiscalYear);
        final var body = new InputStreamResource(stream);

        return ResponseEntity.ok()
                .contentType(MediaType.APPLICATION_PDF)
                .header("Content-disposition", "attachment;filename=export.pdf")
                .body(body);
    }

    @GetMapping("overview/{fiscalYear}")
    @Operation(summary = "query account")
    public ResponseEntity<List<EvaluationStateDto>> getPositions(
            final @PathVariable int fiscalYear) {

        final var answer = positionUiService.get(fiscalYear);
        return ResponseEntity.ok(answer);
    }
}