package com.pharmacopoeia.controller; import com.pharmacopoeia.config.QwenProperties; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @RestController @RequestMapping("/api/v1/admin") public class AdminController { private final QwenProperties qwenProperties; private final JdbcTemplate jdbc; public AdminController(QwenProperties qwenProperties, JdbcTemplate jdbc) { this.qwenProperties = qwenProperties; this.jdbc = jdbc; } @GetMapping("/stats") public ResponseEntity> getStats() { int drugs = jdbc.queryForObject("SELECT COUNT(*) FROM drugs WHERE is_active = TRUE", Integer.class); int chunks = jdbc.queryForObject("SELECT COUNT(*) FROM drug_chunks WHERE vec IS NOT NULL", Integer.class); int queries = jdbc.queryForObject("SELECT COUNT(*) FROM messages WHERE role = 'user'", Integer.class); int users = jdbc.queryForObject("SELECT COUNT(*) FROM users", Integer.class); Map result = new LinkedHashMap<>(); result.put("total_drugs", drugs); result.put("total_chunks", chunks); result.put("total_queries", queries); result.put("total_users", users); return ResponseEntity.ok(result); } @GetMapping("/feedback/list") public ResponseEntity> listFeedback( @RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "20") int pageSize) { return ResponseEntity.ok(Map.of( "items", java.util.Collections.emptyList(), "total", 0, "page", page, "page_size", pageSize )); } @GetMapping("/knowledge/status") public ResponseEntity> knowledgeStatus() { int drugs = jdbc.queryForObject("SELECT COUNT(*) FROM drugs WHERE is_active = TRUE", Integer.class); int chunks = jdbc.queryForObject("SELECT COUNT(*) FROM drug_chunks WHERE vec IS NOT NULL", Integer.class); String lastUpdate = jdbc.queryForObject( "SELECT COALESCE(MAX(updated_at)::text, '') FROM drugs", String.class); Map result = new LinkedHashMap<>(); result.put("total_drugs", drugs); result.put("total_chunks", chunks); result.put("last_update", lastUpdate); result.put("embedding_model", qwenProperties.getEmbeddingModel()); return ResponseEntity.ok(result); } }