package com.magamochi.ingestion.client; import java.util.List; import lombok.Builder; import lombok.Getter; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @FeignClient(name = "flare-solverr", url = "${flare-solverr.endpoint}/v1") public interface FlareClient { @PostMapping( consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) GetResponse get(@RequestBody GetRequest request); @PostMapping( consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) SessionCreateResponse createSession(@RequestBody SessionCreateRequest request); @PostMapping( consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) SessionDestroyResponse destroySession(@RequestBody SessionDestroyRequest request); @PostMapping( consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) SessionListResponse listSessions(@RequestBody SessionListRequest request); @Getter @Builder class GetRequest { @Builder.Default private final String cmd = "request.get"; @Builder.Default private final Integer maxTimeout = 120000; private final String url; private final String session; } @Getter @Builder class SessionCreateRequest { @Builder.Default private final String cmd = "sessions.create"; } @Getter @Builder class SessionDestroyRequest { @Builder.Default private final String cmd = "sessions.destroy"; private final String session; } @Getter @Builder class SessionListRequest { @Builder.Default private final String cmd = "sessions.list"; } record GetResponse(String status, String message, Solution solution) { public record Solution(String url, Integer status, String response) {} } record SessionCreateResponse(String status, String message, String session) {} record SessionDestroyResponse(String status, String message) {} record SessionListResponse(String status, String message, List sessions) {} }