public.controller.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. // api/public/public.controller.js
  2. import PublicService from "./public.service.js";
  3. class Controller {
  4. async getAllResources(req, res) {
  5. try {
  6. const resources = await PublicService.getAllResourcesInfo();
  7. return res.json({
  8. success: true,
  9. data: resources
  10. });
  11. } catch (error) {
  12. console.error('Error retrieving resources:', error);
  13. return res.status(500).json({
  14. success: false,
  15. message: "Failed to retrieve resources information."
  16. });
  17. }
  18. }
  19. async getResourceByName(req, res) {
  20. try {
  21. const resourceName = req.params.name;
  22. // Validate resource name to prevent directory traversal
  23. if (!PublicService.isValidResourcePath(resourceName)) {
  24. return res.status(400).json({
  25. success: false,
  26. message: "Invalid resource name."
  27. });
  28. }
  29. const resource = await PublicService.getResourceInfo(resourceName);
  30. if (!resource) {
  31. return res.status(404).json({
  32. success: false,
  33. message: "Resource not found."
  34. });
  35. }
  36. return res.json({
  37. success: true,
  38. data: resource
  39. });
  40. } catch (error) {
  41. console.error('Error retrieving resource:', error);
  42. return res.status(500).json({
  43. success: false,
  44. message: "Failed to retrieve resource information."
  45. });
  46. }
  47. }
  48. async searchGitRepositories(req, res) {
  49. try {
  50. const { q, page = 1, pageSize = 10 } = req.query;
  51. if (!q || q.trim() === '') {
  52. return res.status(400).json({
  53. success: false,
  54. message: "Search query is required."
  55. });
  56. }
  57. // Validate and sanitize query parameters
  58. const sanitizedQuery = q.trim();
  59. const pageNum = parseInt(page, 10) || 1;
  60. const size = parseInt(pageSize, 10) || 10;
  61. // Get search results
  62. const searchResults = await PublicService.searchGitRepositories(sanitizedQuery, pageNum, size);
  63. return res.json({
  64. success: true,
  65. data: searchResults
  66. });
  67. } catch (error) {
  68. console.error('Error searching repositories:', error);
  69. return res.status(error.statusCode || 500).json({
  70. success: false,
  71. message: error.message || "Failed to search repositories."
  72. });
  73. }
  74. }
  75. }
  76. export default new Controller();