MasterDataController.java

package com.tdmconsult.ete.api;

import com.tdmconsult.ete.masterdata.SecurityDto;
import com.tdmconsult.ete.masterdata.SecurityService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import java.math.BigDecimal;
import java.util.List;
import lombok.RequiredArgsConstructor;
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.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

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

    private final SecurityService securityService;

    @GetMapping("securities")
    @Operation(summary = "query all managed securities")
    public ResponseEntity<List<SecurityDto>> getAll() {
        return ResponseEntity.ok(securityService.getAll());
    }

    @GetMapping("securities/{fiscalYear}/rates")
    public ResponseEntity<List<SecurityDto>> getAllMissingEvaluationRatesForFiscalYear(
            final @PathVariable int fiscalYear) {
        return ResponseEntity.ok(securityService.getMissingEvaluationRates(fiscalYear));
    }

    public record RatePostRequest(
        String securityPublicId,
        BigDecimal rate) {
    }

    @PostMapping("securities/{fiscalYear}/rates")
    public ResponseEntity<List<SecurityDto>> addMissingEvaluationRatesForFiscalYear(
            final @PathVariable int fiscalYear,
            final @RequestBody List<RatePostRequest> rates) {
        return ResponseEntity.ok(securityService.saveEvaluationRates(fiscalYear, rates));
    }
}