RecommendationApiController.java
package com.taxonomy.architecture.controller;
import com.taxonomy.dto.ArchitectureRecommendation;
import com.taxonomy.architecture.service.ArchitectureRecommendationService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
/**
* REST API for Architecture Recommendations.
*
* <p>Endpoints:
* <ul>
* <li>{@code POST /api/recommend} — Generate architecture recommendation</li>
* </ul>
*/
@RestController
@RequestMapping("/api/recommend")
@Tag(name = "Architecture Recommendation")
public class RecommendationApiController {
private final ArchitectureRecommendationService recommendationService;
public RecommendationApiController(ArchitectureRecommendationService recommendationService) {
this.recommendationService = recommendationService;
}
/**
* Request body for architecture recommendation.
*/
public record RecommendationRequest(
Map<String, Integer> scores,
String businessText,
int minScore) {
}
/**
* Generates architecture recommendations for a business requirement.
*/
@Operation(summary = "Architecture recommendation",
description = "Produces architecture recommendations combining matches, gap analysis, and semantic search")
@PostMapping
public ResponseEntity<ArchitectureRecommendation> recommend(@RequestBody RecommendationRequest request) {
ArchitectureRecommendation rec = recommendationService.recommend(
request.scores() != null ? request.scores() : Map.of(),
request.businessText(),
request.minScore());
return ResponseEntity.ok(rec);
}
}