InternetCalendarSubscriptionController.java

package com.tdmconsult.ete.api;

import com.tdmconsult.ete.ical.InternetCalendarSubscriptionService;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Tag(name = "Name", description = "Description")
@RestController
@RequestMapping(value = "/icals", produces = "text/calendar; charset=utf-8")
@RequiredArgsConstructor
public class InternetCalendarSubscriptionController {

    private final InternetCalendarSubscriptionService internetCalendarSubscriptionService;

    @GetMapping("earnings.ics")
    public ResponseEntity<String> getEarningsCalendar() {

        final var ical = internetCalendarSubscriptionService.getEarningsCalendar();
        return ResponseEntity.ok()
                .contentType(MediaType.parseMediaType("text/calendar;charset=UTF-8"))
                .header(HttpHeaders.CONTENT_DISPOSITION, "inline; filename=\"earnings.ics\"")
                .body(ical);
    }
}