AdminController.java 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package com.pharmacopoeia.controller;
  2. import com.pharmacopoeia.config.QwenProperties;
  3. import org.springframework.jdbc.core.JdbcTemplate;
  4. import org.springframework.http.ResponseEntity;
  5. import org.springframework.web.bind.annotation.*;
  6. import java.util.LinkedHashMap;
  7. import java.util.List;
  8. import java.util.Map;
  9. @RestController
  10. @RequestMapping("/api/v1/admin")
  11. public class AdminController {
  12. private final QwenProperties qwenProperties;
  13. private final JdbcTemplate jdbc;
  14. public AdminController(QwenProperties qwenProperties, JdbcTemplate jdbc) {
  15. this.qwenProperties = qwenProperties;
  16. this.jdbc = jdbc;
  17. }
  18. @GetMapping("/stats")
  19. public ResponseEntity<Map<String, Object>> getStats() {
  20. int drugs = jdbc.queryForObject("SELECT COUNT(*) FROM drugs WHERE is_active = TRUE", Integer.class);
  21. int chunks = jdbc.queryForObject("SELECT COUNT(*) FROM drug_chunks WHERE vec IS NOT NULL", Integer.class);
  22. int queries = jdbc.queryForObject("SELECT COUNT(*) FROM messages WHERE role = 'user'", Integer.class);
  23. int users = jdbc.queryForObject("SELECT COUNT(*) FROM users", Integer.class);
  24. Map<String, Object> result = new LinkedHashMap<>();
  25. result.put("total_drugs", drugs);
  26. result.put("total_chunks", chunks);
  27. result.put("total_queries", queries);
  28. result.put("total_users", users);
  29. return ResponseEntity.ok(result);
  30. }
  31. @GetMapping("/feedback/list")
  32. public ResponseEntity<Map<String, Object>> listFeedback(
  33. @RequestParam(defaultValue = "1") int page,
  34. @RequestParam(defaultValue = "20") int pageSize) {
  35. return ResponseEntity.ok(Map.of(
  36. "items", java.util.Collections.emptyList(),
  37. "total", 0,
  38. "page", page,
  39. "page_size", pageSize
  40. ));
  41. }
  42. @GetMapping("/knowledge/status")
  43. public ResponseEntity<Map<String, Object>> knowledgeStatus() {
  44. int drugs = jdbc.queryForObject("SELECT COUNT(*) FROM drugs WHERE is_active = TRUE", Integer.class);
  45. int chunks = jdbc.queryForObject("SELECT COUNT(*) FROM drug_chunks WHERE vec IS NOT NULL", Integer.class);
  46. String lastUpdate = jdbc.queryForObject(
  47. "SELECT COALESCE(MAX(updated_at)::text, '') FROM drugs", String.class);
  48. Map<String, Object> result = new LinkedHashMap<>();
  49. result.put("total_drugs", drugs);
  50. result.put("total_chunks", chunks);
  51. result.put("last_update", lastUpdate);
  52. result.put("embedding_model", qwenProperties.getEmbeddingModel());
  53. return ResponseEntity.ok(result);
  54. }
  55. }